我使用Teststand 64位(National Instrument)和我的DLL之一:
如果我直接从Teststand 64位引用C.dll,我会因为它识别为32位而无法加载DLL。这是按目的完成的,结果与预期一样失败。
这里的问题是,当Teststand调用A.dll时,我不明白它为什么会起作用。 C.dll成功地完成了它的工作,我会发誓这应该是一个例外或任何类型的错误,但没有。
在我的脑海中,从我读过的关于x86和x64的内容来看,x64无法调用x86目标软件。
有人对此有任何解释吗?
我想了解更好地编写我的库的代码,因为这对我来说是一个DLL地狱!
答案 0 :(得分:0)
在过去,dll一直都在追求特定的双重性。我们还是那些人。我喜欢称之为“原生dll”。
.NET DLL和程序打破了。他们是“无知的”。同样编译的MSIL可以作为x64和x32运行,具体取决于在计算机上执行它的框架。如果我们为此获得框架和操作系统,它甚至可以作为x128或x16运行。
只要你将它保存到.NET DLL中,双重性就不是问题了。它有时可以使用Memory约束进入,但总体上我们忽略它。一旦你开始混合本机DLL,binarity突然变成了一切。
我只能说A.DLL和B.DLL似乎是.NET DLL的。我不能告诉它变种“Teststand.exe”和C.dll是什么。或者由C.DLL调用ADO.Net DLLS。我最好的猜测是.NET代码的不间断行足够长,双重性并不重要。 Testrand onyl关心A.dll返回的内容,而不关心它是如何得到这个结果的。并且B.dll可以用.NET方式调用C.dll,其中binarity不会产生(你永远不会用裸指针)。
但是如果你试图直接从Testrand调用x32的C.DLL,它似乎就会破坏。