关于dll中的函数加载顺序的问题?

shanyang1 2013-05-08 04:16:06
有一个c++写的dll文件,内有2个函数aaa()和bbb()
其中aaa()要在bbb()之前执行,否则bbb()会出错

现在把这个dll移植到c#下面执行
先用GetProcAddress来获取函数地址
伪代码如下(hModule为dll文件的句柄):
farProcAAA = GetProcAddress(hModule,"aaa");//得到aaa函数地址
farProcBBB = GetProcAddress(hModule,"bbb");//得到bbb函数地址

然后
functionAAA = (AAAproc)Marshal.GetDelegateForFunctionPointer(farProcAAA ,typeof(AAAproc));//line 10
functionBBB = (AAAproc)Marshal.GetDelegateForFunctionPointer(farProcBBB ,typeof(BBBproc));//line 11

程序运行的时候,先aaa()然后bbb();

问题就在这里,如果functionAAA和functionBBB的赋值代码顺序换一下,等下调用的时候就会出错,比如先line 10和line 11换一下,等下还是先aaa()然后bbb(),这样就会出错

难道dll函数还跟顺序有关系么?
...全文
99 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shanyang1 2013-05-09
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
只是获取不应该出错,估计还是和你的dll设计有关或者跟你获取的方式有关,你是怎么动态获得dll函数指针的?
获取过程和运行过程都没报错,只是出来的结果错误(aaa()要在bbb()的共享内存中做动作,只有aaa()先运行bbb()才能出来正确数据,否则出来的就是错误数据但是不报错) aaa()就有点类似给bbb()初始化的程序,但是就算不给bbb()初始化bbb()也能运行只不过结果是错的
shanyang1 2013-05-09
  • 打赏
  • 举报
回复
dll是别人设计的,我只是调用而已 先hModule = loadlibrary("dll名字") 然后 farProcAAA = GetProcAddress(hModule,"aaa");//得到aaa函数地址 farProcBBB = GetProcAddress(hModule,"bbb");//得到bbb函数地址 然后 然后 functionAAA = (AAAproc)Marshal.GetDelegateForFunctionPointer(farProcAAA ,typeof(AAAproc));//line 10 functionBBB = (AAAproc)Marshal.GetDelegateForFunctionPointer(farProcBBB ,typeof(BBBproc));//line 11 然后 aaa(); bbb(); 这样调用是不会出错,但是把line11放到line10去就会运行的时候,结果就是错的(但程序不会报错,看起来和正常的一样,但是aaa()实际根本没工作,bbb()也就得不到正确运行,出来的结果就是错的)
bdmh 2013-05-08
  • 打赏
  • 举报
回复
只是获取不应该出错,估计还是和你的dll设计有关或者跟你获取的方式有关,你是怎么动态获得dll函数指针的?

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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