TC官方合作论坛
标题:
dllcall调用dll后出错
[打印本页]
作者:
新手学TC
时间:
2013-8-13 21:39
标题:
dllcall调用dll后出错
最近刚学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也能正常调用,
今天试了很久,函数的调用约定也改过,都不行,本人菜鸟,望高手解答!
作者:
sugar987009
时间:
2013-8-13 22:02
只能看看了 爱莫能助了
作者:
jimye0526
时间:
2013-8-13 22:25
char * != char*
作者:
新手学TC
时间:
2013-8-13 22:38
我试了下,把TC中与DLL中的都写成char *或char*,也不行,并且在VC中char*与char *是等效的。
作者:
as128214121
时间:
2013-8-13 23:02
试试:
var 啊=辅助.获取资源路径("D:\\Program Files\\VC6\\vc6工程\\findpicture\\Release")
dllcall(啊 & "findpicture.dll","int","fnFindpicture","char*","dfdfdfsd")
作者:
新手学TC
时间:
2013-8-13 23:19
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")
作者:
kevinqq
时间:
2013-8-14 00:14
看下 函数导出正常不
还有调用约定 最好写成能支持任意语言调用 也不仅仅 是C 或者C++能调用
作者:
新手学TC
时间:
2013-8-14 01:11
回复
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自动生成。
作者:
kevinqq
时间:
2013-8-14 15:32
.cpp 文件
long WINAPI messagebox( char* nameSpace)
{
return ::MessageBoxA(NULL,nameSpace,nameSpace,0);
}
复制代码
.def
LIBRARY
EXPORTS
messagebox
复制代码
附件是TC可以调用的一个vs2010的dll的项目代码
[attach]10651[/attach]
欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/)
Powered by Discuz! X3.1