2010-06-25 6 views
11

Gibt es einen One-Stop-Shop für die Bestimmung, welche Typen/Attribute zu verwenden, bei einem nativen Typ?Wie kann man herausfinden, welcher Typ von P/Invoke verwendet wird?

Beispiel würde wie folgt aussehen:

Native Type | .NET Type 
--------------------------------------- 
    int   | Integer 
    int*   | IntPtr (or is it ref int?) 
    LPCSTR   | [MarshalAs(UnmanagedType.LPStr)]String 
    ... 

Guidelines for custom structures: 
    ... 

Auch als beiseite verwendet, was ist der zuverlässigste Platz für Rangier- Erklärungen für Win32 Funktionen aufzuzublicken?

Antwort

8

pinvoke.net ist eine großartige Ressource für Win32-Funktionssignaturen. Andernfalls müssen Sie sich wirklich die C/C++ - Include-Dateien ansehen, um die Aufrufkonvention und die Argumente herauszufinden. Komplexe Strukturen sind etwas schwieriger, aber der einfachste Weg besteht normalerweise darin, die Struktur in C# zu deklarieren, indem das Attribut StructLayout verwendet wird, um sicherzustellen, dass alle Felder ausgerichtet sind.

Mir ist nicht eine einzige allumfassende Ressource dafür bekannt (das heißt nicht, dass es nicht existiert, nur dass ich nichts davon weiß), aber es gibt eine Menge Informationen über MSDN darüber zu tun.

+0

die gebildeten Rückstellungen für Antworten, aber was ist die Frage? Der Grund, den ich frage, ist, dass ich P/Invoke einige Funktionen von In-House-DLLs muss. –

+0

Ich antworte nur darauf. Ok, ich habe meine Antwort bearbeitet. –

1

Ein weiteres pinvoker Werkzeug für Visual Studio

http://www.pinvoker.com/

Und ein anderes Werkzeug, das einen bestimmten nicht verwalteten Satz von Dateien konvertiert und erzeugt eine verwaltete DLL:

http://www.paulyao.com/res/pinvoke/pinvoke.aspx

Schließlich, wenn Sie don Wenn Sie keine Tools herunterladen möchten, können Sie immer auf die pinvoke.net-Online-Referenz für alle nicht verwalteten Bibliotheken zugreifen, um den pinvoke/marshal als Definitionen zu erhalten:

http://www.pinvoke.net/default.aspx/kernel32.waitforsingleobject

1

Ich mag die interop assistant. Geben Sie es Ihre Deklaration (von Funktion oder Typ - Sie benötigen den Typ, wenn es ein Parameter für die Funktion ist) und gibt Ihnen VB oder C# -Code.

Verwandte Themen