Вот ситуация, я использую dll на основе C в своем приложении dot.net. Есть 2 библиотеки 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);
Простой до сих пор.
Как вы можете себе представить, программное обеспечение скомпилировано с включенным "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-битного)? Как установить DLL_FILE_NAME, прежде чем он будет использоваться в инструкции DllImport?