win32 dll调用MFC dll的问题.

yongziqd 2011-07-12 10:30:18
前提: 有个第三方dll,是用MFC编译的.我自己用win32编译了一个dll,里面调用这个第三方dll.
问题: LoadLibrary没有问题,用GetProcAddress获取函数地址没有问题,调用函数的时候出错.
如果调用的函数没有参数没有问题,如果调用的函数有参数,则会出错.

请教高手,这有可能是哪个地方出了问题?
...全文
383 点赞 收藏 39
写回复
39 条回复
vrace 2011年07月13日
似乎有参数的函数导出的时候被重命名了, LZ 用 Depends 看一看
回复 点赞
thinkboy234 2011年07月13日
继续顶起.
回复 点赞
yongziqd 2011年07月13日
继续顶起.
回复 点赞
yongziqd 2011年07月13日
多谢各位了,我最终还是建了个MFC的dll来调用这个dll了.
回复 点赞
yongziqd 2011年07月12日
[Quote=引用 11 楼 ouwarmth 的回复:]

引用 8 楼 yongziqd 的回复:

引用 6 楼 ouyh12345 的回复:

调用约定是否一致?
C++默认的应该都是_cdecl吧...


把调用约定改成_stdcall试下,在你的dll里边的函数名前都加上_stdcall,如:
int _stdcall test()
{
....
return 0;
}
[/Quote]补充一点,我新建了个MFC的exe程序,调用MFC的dll,在release状态下没有问题.
在debug状态下,调用dll里面的带参数的函数,也存在和win32同样的问题.
回复 点赞
luciferisnotsatan 2011年07月12日
http://www.codeguru.com/cpp/w-p/dll/importexportissues/article.php/c123/
调用C++风格的dll
回复 点赞
wkq87 2011年07月12日
帮顶吧,一般都是MFC里面调用DLL,所以没出现类似问题
回复 点赞
yongziqd 2011年07月12日
[Quote=引用 11 楼 ouwarmth 的回复:]

引用 8 楼 yongziqd 的回复:

引用 6 楼 ouyh12345 的回复:

调用约定是否一致?
C++默认的应该都是_cdecl吧...


把调用约定改成_stdcall试下,在你的dll里边的函数名前都加上_stdcall,如:
int _stdcall test()
{
....
return 0;
}
[/Quote]也不行
回复 点赞
yongziqd 2011年07月12日
[Quote=引用 10 楼 dizuo 的回复:]

用dumpbin -exports/depends看看里面有哪些函数。。。
[/Quote]里面的函数都知道...
回复 点赞
ouwarmth 2011年07月12日
[Quote=引用 8 楼 yongziqd 的回复:]

引用 6 楼 ouyh12345 的回复:

调用约定是否一致?
C++默认的应该都是_cdecl吧...
[/Quote]

把调用约定改成_stdcall试下,在你的dll里边的函数名前都加上_stdcall,如:
int _stdcall test()
{
....
return 0;
}
回复 点赞
ryfdizuo 2011年07月12日
用dumpbin -exports/depends看看里面有哪些函数。。。
回复 点赞
yongziqd 2011年07月12日
[Quote=引用 7 楼 ouyh12345 的回复:]

参数有类的对象吗?跨模块时,传类的对象是不安全的
[/Quote]就传递的普通类型,int,char* 之类的.
回复 点赞
yongziqd 2011年07月12日
[Quote=引用 6 楼 ouyh12345 的回复:]

调用约定是否一致?
[/Quote]C++默认的应该都是_cdecl吧...
回复 点赞
ouyh12345 2011年07月12日
参数有类的对象吗?跨模块时,传类的对象是不安全的
回复 点赞
ouyh12345 2011年07月12日
调用约定是否一致?
回复 点赞
yongziqd 2011年07月12日
[Quote=引用 4 楼 dizuo 的回复:]

mfc编译的dll木有头文件吗?
[/Quote]没有头文件.只是一个动态库,还有一个说明文件,说明里面的函数定义.
回复 点赞
ryfdizuo 2011年07月12日
mfc编译的dll木有头文件吗?
回复 点赞
yongziqd 2011年07月12日
[Quote=引用 1 楼 atzai 的回复:]

MFC中的函数可能需要MFC库支持,你的win32程序默认不会加载MFC库。
[/Quote]我的win32程序加载没有问题,只是调用里面函数的时候出问题.
如果函数没有参数,调用正确.如果函数有参数,调用错误.
回复 点赞
jackyjkchen 2011年07月12日
MFC的dll不是标准格式,导入方式和普通的纯C的dll不一样吧,我尽量避免mfcdll,没用过
回复 点赞
atzai 2011年07月12日
MFC中的函数可能需要MFC库支持,你的win32程序默认不会加载MFC库。
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告