C# и PInvoke в 32/64-битную DLL [дубликат]
На этот вопрос уже есть ответ здесь:
Я создаю библиотеку классов, которую надеюсь в конечном итоге поместить на NuGet. Прямо сейчас он нацелен на AnyCPU.
Теперь я хочу PInvoke в DLL, которая поставляется как в 32, так и в 64-битных версиях. Поначалу я думал, что просто ... используйте 32-разрядную версию, но это вызвало исключение BadImageFormatException. Я изменил библиотеку, чтобы она предназначалась только для X86, и хотя это работает, она требует, чтобы вызывающий объект тоже был 32-битным процессом. Это, естественно, не будет работать для проекта NuGet.
Цените любые мысли о том, как работать с 32/64-битными версиями нативной библиотеки и как упаковать это в NuGet (предпочитайте не иметь 2 разных сборок).
1 ответ:
Вы можете проверить платформу во время выполнения и PInvoke в различных библиотеках DLL.
Если вы хотите, чтобы он работал безstatic void NativeFuncWrapper(){ if(Environment.Is64BitProcess){ NativeFuncWrapper64(); //this calls 64-bit dll }else{ NativeFuncWrapper32(); //this calls 32-bit dll } }
Environment.Is64BitProcess
, прочитайте Как узнать, что процесс является 32-разрядным или 64-разрядным программно для альтернативных методов.