这是情况,我在我的 dot.net 应用程序中使用基于 C 的 dll。有 2 个 dll,一个是 32 位的,称为 MyDll32.dll,另一个是 64 位的版本,称为 MyDll64.dll。
有一个静态变量保存 DLL 文件名:字符串 DLL_FILE_NAME。
它的使用方式如下:
[DllImport(DLL_FILE_NAME, CallingConvention=CallingConvention.Cdecl, EntryPoint=Func1")]
private static extern int is_Func1(int var1, int var2);
到目前为止很简单。
可以想象,软件是在“Any 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之前设置它?