我们有一个.NET库,它引用了我们的一个非托管dll,让我们说:
到目前为止,Unmanaged.dll只有32位,所以DotNet.dll标有32位CPU类型。
需要添加64位支持。如何组织dll? 对于32位和64位版本,DotNet.dll的IL代码都是相同的。
在这种情况下,使用这些库的开发人员被迫生成2个应用程序:32位和64位。但在这种情况下,确切知道发生了什么。
这与选项1相同,但DotNet.dll的CPU类型为AnyCPU。
我不喜欢这个,因为使用这些库的开发人员在重新分发他们的应用程序时,如果不在他们的应用程序上设置CPU类型,就不能很好地使他们的应用程序崩溃:
这使选项1优于选项2。
DotNet.dll在运行时会确定它运行的位数,然后PInvoke正确的Unmanaged.dll。
答案 0 :(得分:4)
答案 1 :(得分:2)
选项3似乎最简单,而选项1似乎是最安全的。仅从要调用的库的角度来看,除非你处理大量的调用,否则它们似乎并不难以管理它们。主要问题是你将不得不两次声明任何给定的函数,使用32位和64位版本的不同名称,然后只需将DllImport
属性更改为指向正确的目标。你的存根函数必须在运行时决定调用哪一个。
请注意,除了物流外,您无需在库文件夹中包含两者。只要您不调用“错误”库的调用,排除它就不会产生任何影响。
答案 2 :(得分:2)