неуправляемый код DLL - PullRequest
       10

неуправляемый код DLL

3 голосов
/ 16 апреля 2009

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

void * Initialize (int x);

voic GetData (void *);

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

Необработанное исключение: System.Reflection.TargetInvocationException: исключение было сгенерировано целью вызова. ---> System.BadImageFormatException: была предпринята попытка загрузить программу с неверным форматом. (Исключение из HRESULT: 0x8007000B) в Aktuelizator.CommonLibrary.InitializeRingBuffer (Int32 dim) в Aktuelizator.AktuelizatorWService.AktuelizatorWS..ctor ()

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

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

Ответы [ 3 ]

2 голосов
/ 16 апреля 2009

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

1 голос
/ 16 апреля 2009

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

0 голосов
/ 16 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...