2010-06-25 8 views
11

Existe-t-il un guichet unique pour déterminer quels types/attributs .NET utiliser, étant donné un type natif?Comment savoir quel type de marshall utiliser P/Invoke?

exemple ressemblerait à quelque chose comme ceci:

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

Guidelines for custom structures: 
    ... 

En outre, comme lié à part, ce qui est l'endroit le plus fiable pour rechercher des déclarations pour Win32 fonctions de triage?

Répondre

8

pinvoke.net est une excellente ressource pour les signatures de fonctions win32. Sinon, vous devez vraiment regarder les fichiers d'inclusion C/C++ pour comprendre la convention d'appel et les arguments. Les structures complexes sont un peu plus dures, mais le plus simple est généralement de déclarer la structure en C# en utilisant l'attribut StructLayout pour s'assurer que tous les champs sont alignés.

Je ne suis pas au courant d'une ressource unique pour ce faire (cela ne veut pas dire qu'elle n'existe pas, juste que je ne sais pas à ce sujet), mais il y a beaucoup d'informations sur MSDN à propos de le faire.

+0

Cela répond à la part, mais qu'en est-la question? La raison pour laquelle je demande est que j'ai besoin de P/Invoke certaines fonctions de DLL internes. –

+0

Je réponds seulement aux apartés. Eh bien, d'accord, j'ai édité ma réponse. –

1

Un autre outil pinvoker pour Visual Studio

http://www.pinvoker.com/

Et un autre outil qui convertit un ensemble non géré donné de fichiers et génère un dll géré:

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

Enfin, si vous ne ne veux pas télécharger des outils, vous pouvez toujours se référer à la référence en ligne pinvoke.net pour toutes les bibliothèques non gérées pour obtenir le pinvoke/marshal comme définitions:

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

1

J'aime le interop assistant. Donnez-lui votre déclaration (de fonction ou de type - vous avez besoin du type s'il s'agit d'un paramètre de la fonction) et il vous donne le code VB ou C#.

Questions connexes