win32 dll调用MFC dll的问题.

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

请教高手,这有可能是哪个地方出了问题?
...全文
480 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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库。
加载更多回复(19)

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧