情况是这样的,我在dot.net应用程序中使用了一个基于C的动态链接库。有两个dll,一个是称为MyDll32.dll的32位版本,另一个是称为MyDll64.dll的64位版本。
有一个静态变量保存着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之前,如何设置它?
https://stackoverflow.com/questions/10852634
复制相似问题