情况是这样的,我在我的dot中使用了一个基于C的dll.net应用程序.有两个DLL,一个是32位的MyDll32.另一个是名为MyDll64的64位版本.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 before?