Problem mit PInvoke
-
Hallo,
ich möchte gerne eine Funktion aus einer DLL in C# aufrufen. Dazu nutze ich PInvoke. Die Funktion sieht so aus:
typedef struct _TestStruct { INT32 i1; INT32 i2; const char *str1; const char *str2; } TestStruct; extern "C" int fntest_dll(TestStruct *t);
Ich habe mit PInvoke einen wrapper geschrieben und kann die Funktion aufrufen:
public struct TestStructT { public System.Int32 i1; public System.Int32 i2; [MarshalAs(UnmanagedType.LPStr)] public string str1; [MarshalAs(UnmanagedType.LPStr)] public string str2; }; [DllImport("test_dll.dll")] public static extern int fntest_dll(out TestStructT device_key);
Alles geht, wenn ich x86 benutze. Sobald ich auf x64 umstelle, stürzt das Programm ab. Und ich kann es nicht debuggen. Ich habe mal ein Testprojekt erstellt, welches die dll, die wrapper und die c#-Anwendung enthält:
http://www.file-upload.net/download-3034723/test_dll.zip.htmlVielleicht kann mir einer helfen? Danke!
-
Servus,
du kannst leider nicht auf eine in 32 Bit (x86) kompilierte Native DLL mit einer in 64 Bit (x64) kompilierten Applikation zugreifen. Das geht in die Hose. Du hast jetzt die Möglichkeiten, deine Applikation mit x86 zu kompilieren oder deine DLL in (x64).
gruß
Hellsgore
-
Hellsgore schrieb:
Servus,
du kannst leider nicht auf eine in 32 Bit (x86) kompilierte Native DLL mit einer in 64 Bit (x64) kompilierten Applikation zugreifen. Das geht in die Hose. Du hast jetzt die Möglichkeiten, deine Applikation mit x86 zu kompilieren oder deine DLL in (x64).
Mache ich doch. Jeweils stammen die Zielarchitekturen überein (x86/x64).
C.