P/Invoke-Problem

01/09/2008 - 13:09 von Thorsten Kleibaum | Report spam
Hallo zusammen,

ich muß in mein Projekt eine dll-Datei einbinden, über die die
Kommunikation mit Spezial-Hardware ablaufen soll - doch es hakt.

In der Spezifikation steht bspw. folgendes:

long CCC_ProtocolSelect(LPSTR conn_str);

If the function succeeds, the return value is zero.
If the function fails, the return value is nonzero.

Dies habe ich folgendermaßen bei mir eingebunden:

[DllImport("ccc.dll")]
private static extern long
CCC_ProtocolSelect([MarshalAs(UnmanagedType.LPStr)] string conn_str);

public bool ProtocolSelect(string connectionString) {
long l = CCC_ProtocolSelect(connectionString);
return l == 0 ? true : false;
}

Rufe ich nun aber die Methode auf, so bekomme ich stets einen Wert
zurück, der sehr hoch ist; z.B. 8011771864416256.

Wenngleich es nicht zu bestreiten ist, daß dieser Wert 'nonzero' ist, so
gehe ich nicht davon aus, daß dies tatsàchlich das ist, was mir die
Methode zurücklilefern soll - zumal der Wert immer ein anderer ist.

Vielmehr vermute ich, daß es sich hierbei um eine Adresse handelt, doch
ich weiß nicht, wie ich damit umgehen soll/ muß.

Kann mir hier vielleicht jemand einen schlauen Tipp geben?

Gruß Thorsten
 

Lesen sie die antworten

#1 Thomas Scheidegger
01/09/2008 - 13:15 | Warnen spam
Hallo Thorsten

long CCC_ProtocolSelect(LPSTR conn_str);
[DllImport("ccc.dll")]
private static extern long
Rufe ich nun aber die Methode auf, so bekomme ich stets einen Wert
zurück, der sehr hoch ist; z.B. 8011771864416256.




'long' in Visual C++ ist 32-Bit,
in C# schon 64-Bit
Nimm da in C# int/Int32.




Thomas Scheidegger - 'NETMaster'
http://dnetmaster.net/

Ähnliche fragen