Autor Wątek: Import DLL napisanej w C++  (Przeczytany 3466 razy)

Offline Ayanami

  • Użytkownik

# Maj 01, 2009, 20:19:45
Mam DLL napisaną w C++ (Visual 2008):
Kod: (cpp) [Zaznacz]
#include "windows.h"
#include <stdio.h>

extern "C"
{

__declspec(dllexport) void  Test(unsigned _t)
{
WCHAR s[256];

wsprintf(s, TEXT("_t = %d"), _t);

MessageBox(0, s, TEXT(""), MB_OK);
}

}


Używając jej w projekcie pisanym w C++ (czyli standardowo LoadLibrary i GetProcAddress) jestem w stanie wywołać funkcję Test().
Problem pojawia się w projekcie pisanym w C#.
Kod: (csharp) [Zaznacz]
static class Program
{
        [DllImport("TestDLL.dll")]
        public static extern void Test(UInt32 _c);

        ...
}
Kod: (csharp) [Zaznacz]
Program.Test(1024);

Mając kod jak wyżej, dostaję błąd:



Cytuj
An unhandled exception of type 'System.BadImageFormatException' occurred in AiSD_GUI.exe

Additional information: Próbowano załadować program w niepoprawnym formacie. (Wyjątek od HRESULT: 0x8007000B)

Co jest nie tak?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline asasm

  • Użytkownik

# Maj 01, 2009, 20:36:54
use the google Luke http://msdn.microsoft.com/en-us/library/k7137bfe(VS.80).aspx...

zwłaszcza że piszą tam jakiego przełącznika użyć przy linkowaniu i dlaczego tak się dzieje...

Offline Ayanami

  • Użytkownik

# Maj 01, 2009, 20:49:30
O /fixed:no wiem i standardowo dodałem do parametrów linkera.

Okazuje się, że winna była 32-bitowa DLL-ka. Pracuję na Windows Vista x64 i w opcjach projektu C# miałem ustawiony platform target na 'Any CPU'. Czyli odpalając program w środowisku 64-bitowym oczekiwana była 64-bitowa DLL. Zmieniłem terget na x86 i wszystko hula w WOW64. :)