情况是这样的,我在 dot.net 应用程序中使用了一个基于 C 的 dll。有两个 dll,一个是32位的 MyDll32.dll,另一个是64位的 MyDll64.dll。
有一个静态变量保存 DLL 文件名: string DLL _ FILE _ NAME。
它的使用方式如下:
[DllImport(DLL_FILE_NAME, CallingConvention=CallingConvention.Cdecl, EntryPoint=Func1")]
private static extern int is_Func1(int var1, int var2);
目前为止很简单。
正如你可以想象的那样,该软件是在打开“任意 CPU”的情况下编译的。
我还有以下代码来确定系统是否应该使用64位文件或32位文件。
#if WIN64
public const string DLL_FILE_NAME = "MyDll64.dll";
#else
public const string DLL_FILE_NAME = "MyDll32.dll";
#endif
现在你应该知道问题所在了。.DLL _ FILE _ NAME 是在编译时定义的,而不是在执行时定义的,因此不会根据执行上下文加载正确的 DLL。
处理这个问题的正确方法是什么?我不想要两个执行文件(一个为32位,另一个为64位) ?如何在 DllImport 语句中设置 DLL _ FILE _ NAME 之前?