2009-08-20 7 views
1

Je travaille actuellement sur du code C# qui appelle une DLL native personnalisée. Lors du marshaling des données en C#, j'ai besoin d'aligner explicitement les champs des classes/structs utilisés pour le marshaling. J'ai eu un certain nombre de problèmes à cause d'une compréhension incomplète du marshaleur et de ses règles. Par exemple, j'ai récemment découvert par le biais d'une question SO que le marshaler exige que les tableaux soient alignés DWORD. Si j'avais su cela plus tôt, cela m'aurait sauvé un peu de mal de tête..NET Marshaler: Bonne documentation?

Ma question est double:

1) Y at-il une bonne documentation pour le marshaleur qui fournit ce type d'information?

2) Quelles autres restrictions similaires devrais-je prendre en compte? (Par exemple, tous les champs de taille DWORD doivent-ils être alignés DWORD)?

Répondre

1

http://pinvoke.net a beaucoup de bonnes informations, y compris les instructions exactes de marshalling pour beaucoup (la plupart? C'est basé sur le wiki, donc vous pouvez ajouter de nouvelles bibliothèques ou des problèmes avec les existantes.

+0

C'est un site utile, mais je rassemble des données depuis un fichier .dll personnalisé. Donc, je dois définir moi-même toutes les structures/classes de marshaling. J'ai eu quelques problèmes gênants découlant de ne pas comprendre le marshaleur et ses règles, alors j'espérais trouver une bonne documentation sur le sujet. – Odrade

2

Il existe un outil utile pour générer les signatures pinvoke pour une bibliothèque donnée. Il a des raccourcis pour win32 apis mais vous pouvez passer vos propres fichiers.

pinvoke interop assistant

Je ne sais pas combien cela va aider à la compréhension des applications, mais au moins il pourrait vous donner des exemples de travail. Je l'ai utilisé pour générer une interface C# à certains de notre code natif et cela a bien fonctionné.

Le codeplex site semble avoir quelques outils de diagnostic utiles que je vais donner.

Questions connexes