Программа C # и C ++ DLL скомпилированы для сбоя 32-битной системы в 64-битной системе - PullRequest
2 голосов
/ 16 декабря 2010

У меня есть приложение на C #, которое использует DLL, так как мне нужен C ++ для доступа к некоторым неуправляемым функциям API user32 (для этого я не могу использовать PInvoke). Я компилирую и приложение, и DLL для архитектуры x86, и все отлично работает на 32-битной Windows 7. Теперь проблема заключается в том, что в 64-разрядной версии Windows 7 происходит сбой приложения, когда я пытаюсь использовать функцию, основанную на DLL (но все остальное работает нормально).

Я подозреваю, что это проблема 32/64 битов, поэтому я попытался перекомпилировать DLL для архитектур x64, и теперь я могу выбрать во время выполнения, какую DLL загружать между x86 и x64. Но все равно происходит сбой, когда я пытаюсь использовать функцию, основанную на DLL (что имеет смысл, когда я пытаюсь загрузить 64-битную DLL в 32-битную программу). Я еще не пытался скомпилировать приложение и DLL для x64. Я подозреваю, что это сработает, однако это потребует от меня двух разных инсталляторов, и я не хочу туда идти. Любая подсказка?

1 Ответ

2 голосов
/ 16 декабря 2010

При взаимодействии с неуправляемым кодом необходимо убедиться, что ваше приложение .Net работает в той же подсистеме (32-разрядной или 64-разрядной). Поскольку вы заявили, что загружаемая DLL предназначена для x86, вынудите .Net собирать только для платформы x86. Этот параметр находится в свойствах вашего проекта на вкладке сборки. По умолчанию используется любой процессор, измените настройку на x86, чтобы она соответствовала вашей неуправляемой DLL, и у вас все будет хорошо, независимо от того, работаете ли вы на 64-битной или 32-битной ОС.

...