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
LPBYTE dürfte dem Namen nach ein Long-Pointer auf ein Char(-Array) sein, LPCommands könnte das gleiche sein, ein Char(-Array), in dem Kommandos abgespeichert sind. Ralf
Danke für Deine Antwort. Das hilft mir aber leider nicht weiter. Ich muss wissen wie ich das meinem Code bekannt mache. Also wie die Header Datei bekannt machen?
http://www.pinvoke.net/ Schau mal da, ob du Anhaltspunkte findest (nach Typenpräfix der Argumente suchen), wie man den Managed-Blödsinn austricksen kann.
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
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); |
Danke für Eure Antworten und Hilfe, ich glaube so komme ich weiter. Ich werds mal antesten. viele Grüße Maik
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.