DLL函数返回值的问题

sewenew 2010-09-30 09:55:19
有一个dll,还有一个exe和一个ocx。exe 和ocx 共用大部分代码,并且都调用dll。其中一段是:

// exe 和ocx 都会调到以下代码
A *pa;
pa = GetAResource();

// GetAResource是一个定义在dll中的函数:
// A* GetAResource(){return data;}

当我在exe下调试的时候,pa可以拿到正确的值。

但是当我在ocx中调试的时候,当程序运行到这里,step into GetAResource,发现return data语句中的data确实是正确的值,但是当程序运行回到ocx时,pa却没能拿到正确的值。而且每次调试时,data会有不同的值,但pa的值却一直不变。。。

有谁遇到过这种情况吗?能否提供点建议,谢谢!
...全文
82 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sewenew 2010-09-30
  • 打赏
  • 举报
回复
不是。。。。
lazy_2010 2010-09-30
  • 打赏
  • 举报
回复
是不是你的 data 是一个局部变量导致的。
sewenew 2010-09-30
  • 打赏
  • 举报
回复
或许因为用不同的编译器,所以dll和ocx的runtime地址空间不同,因此在dll中new出来的资源ocx里无法正确获取???
sewenew 2010-09-30
  • 打赏
  • 举报
回复
确实是extern C的,而且也是用的LoadLibrary/GetProcAddress方式,但实在找不出是什么原因了。dll和exe都是用VC7编译的,并且可以正常运行,但ocx用VC9编译,就不能正确调用dll了,只有等把dll用VC9编译一遍之后在来测试吧。

anyway,thanks!
lazy_2010 2010-09-30
  • 打赏
  • 举报
回复
如果你的 dll 是输出 C 形式的接口,使用 LoadLibrary/GetProcAddress 的方式,应当与编译器版本无关的。
sewenew 2010-09-30
  • 打赏
  • 举报
回复
找到一个可能的原因了,dll是用vc7编译的,ocx是用vc9编译的。。。
lazy_2010 2010-09-30
  • 打赏
  • 举报
回复
函数申明如果没有错,你还是上调用的代码或者被调用函数的代码吧

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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