Problem mit PInvoke

14/12/2010 - 14:43 von Curtis Newton | Report spam
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 (dll und
wraper!), stürzt das Programm ab. Es ist also NICHT das Problem, wenn
man versucht, x86-dlls mit x64-assemblys zu laden.

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...l.zip.html

Vielleicht kann mir einer helfen? Danke!
Bye
 

Lesen sie die antworten

#1 Jochen Kalmbach[MS MVP]
14/12/2010 - 15:21 | Warnen spam
Hallo Curtis!

Bist Du sicher dass das Alignment des 2. und 3. Eintrages stimmt?

Greetings
Jochen

Ähnliche fragen