Я правильно называю эту C ++ DLL? - PullRequest
1 голос
/ 01 марта 2012

Мне нужно вызвать функцию C ++ DLL из C #, определение функции C ++ равно

DWORD Init(char*[],int,int,int);

и я называю это в C #, вот так

[DllImport("DLLTest.dll")]
unsafe public static extern int Init(string[] detailsarray, int amount, int ID1, int ID2);

//then in main...

string[] details = new string[3];
details[0] = "blahblah";
details[1] = "bloobloo";
details[2] = "1234";

int result = Init(details, 1, 16, 170);

При запуске я получаю необработанное исключение типа System.BadImageFormatException. Я считаю, что нормально проходить через строки, когда C ++ DLL ожидает char * s, и я также думаю, что это нормально - использовать int в C # вместо DWORD в C ++, но, если я прав, пожалуйста, дайте мне знать.

Спасибо.

РЕДАКТИРОВАТЬ - я должен добавить, я проверил DLL в приложении C ++, и она отлично работает.

1 Ответ

4 голосов
/ 01 марта 2012

BadImageFormatException часто возникает, если вы пытаетесь загрузить 32-битную DLL в 64-битный процесс или наоборот. Если DLLTest.dll является 32-битной DLL, вам нужно скомпилировать вашу C # DLL для платформы x86, а не Any CPU

http://msdn.microsoft.com/en-us/library/zekwfyz4(v=vs.100).aspx

http://davidstechtips.com/wp-content/uploads/2010/06/VisualStudioPlatformTargetx86.png

...