Hilfe, Marshaling

Reticent

Erfahrenes Mitglied
Liebe kluge Köpfe,

ich bin wahrscheinlich komplett auf euch angewiesen. Ich möchte eine in c++ geschriebene DLL in c# benutzen. So. Ich weiss, dass man es mithilfe von Marshaling machen muss. Die Aufrufe gibt es in c++. Jetz möchte ich sie zu c# umwandeln. Ich habe es versucht und das hier
Code:
void* __cdecl OpenComm(char* commDevice, char autodetect, struct presetSettings* settings);
zur
Code:
[DllImport("Reader.dll")]
internal extern static byte OpenComm([MarshalAs(UnmanagedType.LPArray)] byte[] device, byte autodetect, ref Reader.presetSettings settings);
umgewandelt. Es bringt zumindest keine Fehler, aber ich vermute, dass es doch nicht ganz richtig ist. Leider habe ich bei weiteren Funktionen versagt.

Kann mir jemand helfen einige Aufrufe richtig zu "umwandeln"? Es handelt sich z.B. um so einz:
Code:
char* __cdecl DetectReader(void* hComm, char* buffer);
Eben was ich in der OpenComm als Rückgabewert erhalte, soll hier an Stelle von hComm sein. Ich habe so versucht:
Code:
[DllImport("Reader.dll")]
internal extern static byte[] DetectReader(byte h_comm, [MarshalAs(UnmanagedType.LPArray)] byte[] buffer);
Im c# Programmcode mache ich dann
Code:
byte b_hComm = OpenComm(..);
DetectReader(h_Comm...);
es kommt aber bei DetectReader ein Runtimefehler. d.h ich mache es falsch.

wie mache ich es richtig?
 

Neue Beiträge

Zurück