Вопрос

У меня есть приложение C# (.NET 3.5, VS2005 Professional), которое использует неуправляемую 32-битную библиотеку, написанную на C/C++.API, который я использую, выглядит следующим образом:

void * Инициализировать (int x);

голосовой GetData (недействительный *);

И это работает, когда я запускаю его в 32-битной Windows XP, но в 64-битной Windows XP выдается исключение:

Необработанное исключение:System.Reflection.TargetInvoctionException:Исключение было создано целью вызова.---> System.BadImageFormatException:Была предпринята попытка загрузить программу неверного формата.(Исключение из HRESULT:0x8007000b) на aktuelizator.commonlibrary.initializeringbuffer (int32 Dim) на aktuelizator.aktuelizatorwservice.aktuelizatorws..ctor ()

Эти неуправляемые библиотеки DLL работают в 64-битной версии XP при вызове из 32-битной версии, что отключает управление приложением, написанным на C/C++.

Есть ли у кого-нибудь идеи?

Это было полезно?

Решение

Для вашей платформы конфигурации сборки установлено значение «Любой процессор», это означает, что в 64-битной ОС она работает как 64-битная, и вы не можете загрузить dll.Вместо этого установите его на x86, это заставит его работать как 32-битный независимо от ОС, и ваша dll будет загружаться нормально.

Другие советы

Похоже, ваша DLL скомпилирована только в 32-битную версию, но вы пытаетесь вызвать ее как из 32-битного, так и из 64-битного процесса.Первое, конечно, сработает.Позднее, однако, этого не произойдет.32-битные библиотеки DLL можно использовать только в 32-битных процессах.Попробуйте скомпилировать DLL в 64-разрядную версию и позволить приложению C# использовать ее.

Проверьте все параметры, определенные как Int32, которые на самом деле должны быть IntPtr.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top