fremde DLL in C# importieren

Gast #1221254
Lesenswert?

Hallo,

ich versuche eine Funktion aus einer fremdem DLL in mein c# Projekt zu 
importieren.
Dabei tauchen in der Funktionsübergabe aber Strukturen und ein LPBYTE 
auf. Dies ist in der Header-Datei definiert (bis auf LPBYTE). Die Header 
Datei kann ich in C# nicht einbinden. Wie gehe ich da weiter vor?

//So ist die Funktion in der Lib angegeben
STBLLIB_API BYTE STBL_GET(LPBYTE Version, LPCommands pCmds);

//So möchte ich sie importieren
[DllImport("STBLLIB.dll")]
public static extern byte STBL_GET(byte[] Version, LPCommands pCmds);

wie komme ich an LPBYTE und LPCommands?

Gruß
Maik

P.S. IDE: Visual C# 2005 Express Edition
Gast #1221559
Lesenswert?

Ich müsst jetzt erstmal auf der Festplatte rumwühlen, bei einem Versuch, 
die FTDI-DLLs in C# einzubinden, hatte ich das gleiche Problem, was sich 
mit der IntPtr-Struktur aus C# einwandfrei lösen lies.
In deinem Fall dürfte das auch funktionieren, anstatt LPBYTE gibst du 
als Typ einfach IntPtr an. Die genaue Verwendung musst du in der 
Dokumentation zum .NET FrameWork nachlesen.

Ralf
#1222050
Lesenswert?

Maik wrote:
> wie komme ich an LPBYTE und LPCommands?

LPBYTE wurde schon erklärt, LPCommands muss irgendwo in den Headern der 
DLL definiert sein -> die Struktur zu LPCommands finden und in C# 
passend nachbilden...
1
[StructLayout(LayoutKind.Sequential)]
2
public struct Commands {
3
    ...
4
}
5
// oder 
6
[StructLayout(LayoutKind.Explicit)]
7
public struct Commands {
8
    [FieldOffset(123456789)]
9
    ...
10
}
11

12
// Aufruf 
13
Commands cmd;
14
byte[] version = ...;
15
STBL_GET(version, ref Commands cmd);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren