关于dll中的函数加载顺序的问题?
有一个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函数还跟顺序有关系么? --------------------编程问答-------------------- 只是获取不应该出错,估计还是和你的dll设计有关或者跟你获取的方式有关,你是怎么动态获得dll函数指针的? --------------------编程问答-------------------- 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()也就得不到正确运行,出来的结果就是错的) --------------------编程问答--------------------
获取过程和运行过程都没报错,只是出来的结果错误(aaa()要在bbb()的共享内存中做动作,只有aaa()先运行bbb()才能出来正确数据,否则出来的就是错误数据但是不报错)
aaa()就有点类似给bbb()初始化的程序,但是就算不给bbb()初始化bbb()也能运行只不过结果是错的
补充:.NET技术 , C#