TC官方合作论坛

 找回密码
 立即注册
查看: 621|回复: 8
打印 上一主题 下一主题

[已解决] dllcall调用dll后出错

[复制链接]
跳转到指定楼层
楼主
发表于 2013-8-13 21:39:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
最近刚学TC,想用dllcall调用自己写的DLL中的函数,DLL中的函数能够调用成功,但是在返回时,却出现了内存访问错误。
TC中的代码如下:
namespace faaf
//默认空间
//开始按钮_点击操作
function start_click()
    dllcall("D:\\Program Files\\VC6\\vc6工程\\findpicture\\Release\\findpicture.dll","int","fnFindpicture","char*","dfdfdfsd")      
endfunction
//退出按钮_点击操作
function exit_click()   
    help.exit()
endfunction
endnamespace
//空间结束
DLL中的函数代码,是用VC6.0写的:
extern "C" FINDPICTURE_API int fnFindpicture(char* a)////////////////////////////////////////////////////////////////////////////////////////      
{

        MessageBox(NULL,"","",MB_OK);
        return 42;
}
用VC可以正常调用,用TC调用能执行MessageBox函数,但是点击MessageBox的确定按扭后,就出现内存访问错误,如果把函数的char*类型参数去掉,也就是使函数没有参数,TC也能正常调用,
今天试了很久,函数的调用约定也改过,都不行,本人菜鸟,望高手解答!
回复

使用道具 举报

9#
发表于 2013-8-14 15:32:20 | 只看该作者
.cpp 文件

  1. long WINAPI messagebox( char* nameSpace)
  2. {
  3.         return ::MessageBoxA(NULL,nameSpace,nameSpace,0);
  4. }
复制代码
.def
  1. LIBRARY

  2. EXPORTS
  3.         messagebox
复制代码

附件是TC可以调用的一个vs2010的dll的项目代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

沙发
发表于 2013-8-13 22:02:30 | 只看该作者
只能看看了  爱莫能助了
回复 支持 反对

使用道具 举报

板凳
发表于 2013-8-13 22:25:41 | 只看该作者
char * != char*
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2013-8-13 22:38:35 | 只看该作者
我试了下,把TC中与DLL中的都写成char *或char*,也不行,并且在VC中char*与char *是等效的。
回复 支持 反对

使用道具 举报

5#
发表于 2013-8-13 23:02:08 | 只看该作者
试试:
var 啊=辅助.获取资源路径("D:\\Program Files\\VC6\\vc6工程\\findpicture\\Release")
dllcall(啊 & "findpicture.dll","int","fnFindpicture","char*","dfdfdfsd")
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2013-8-13 23:19:05 | 只看该作者
DLL的路径是没有错的,因为当把DLL的函数代码写成
extern "C" FINDPICTURE_API int fnFindpicture()////////////////////////////////////////////////////////////////////////////////////////      
{

    MessageBox(NULL,"","",MB_OK);
    return 42;
}
也就是无参函数时,TC中是可以像下面这样正常调用的
dllcall("D:\\Program Files\\VC6\\vc6工程\\findpicture\\Release\\findpicture.dll","int","fnFindpicture")
回复 支持 反对

使用道具 举报

7#
发表于 2013-8-14 00:14:22 | 只看该作者
看下 函数导出正常不
     还有调用约定 最好写成能支持任意语言调用  也不仅仅 是C 或者C++能调用
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2013-8-14 01:11:39 | 只看该作者
回复 7楼kevinqq的帖子

函数导出正常,因为VC可以正常调用,前面也说了,如果,把导出函数改成无参函数,TC也能正常调用,调用约定试过__stdcall,__cdecl,__fastcall,建立是的win32 dynamic~link library,而非MFC  DLL,DLL代码上我只加入下面的代码:
extern "C" FINDPICTURE_API int fnFindpicture(char *)////////////////////////////////////////////////////////////////////////////////////////      
{
    MessageBox(NULL,"","",MB_OK);
    return 42;
}
其它代码全由VC自动生成。
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18043773号

GMT+8, 2025-10-2 20:56 , Processed in 0.140187 second(s), 25 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表