2009-08-20 6 views
1

Ich arbeite derzeit an einigen C# -Code, der in eine benutzerdefinierte, native DLL aufruft. Beim Marshalling von Daten zurück nach C# muss ich die Felder der zum Marshalling verwendeten Klassen/Strukturen explizit ausrichten. Ich hatte eine Reihe von Problemen damit, die auf einem unvollständigen Verständnis des Marshallers und seiner Regeln beruhen. Zum Beispiel habe ich kürzlich durch eine SO-Frage herausgefunden, dass der Marshaller erfordert, dass Arrays DWORD-ausgerichtet werden. Hätte ich das früher gewusst, hätte es mir Kopfschmerzen erspart..NET Marshaler: Gute Dokumentation?

Meine Frage ist zweifach:

1) Gibt es eine gute Dokumentation für die Marshaler, die diese Art von Informationen liefern?

2) Welche anderen ähnlichen Einschränkungen sollte ich beachten? (Müssen beispielsweise alle DWORD-großen Felder DWORD-ausgerichtet sein)?

Antwort

1

http://pinvoke.net hat eine Menge guter Informationen, einschließlich exakter Anweisungen zum Marshalling für viele (die meisten?) Der serienmäßigen win32-Funktionen, sowie für viele andere. Es ist Wiki-basiert, so dass Sie neue Bibliotheken oder Fehler mit bestehenden hinzufügen können, die Sie hinzufügen können.

+0

Das ist eine nützliche Site, aber ich hole Daten von einer benutzerdefinierten DLL zurück. Also, ich muss alle Marshalling-Struktur/Klassen selbst definieren. Ich hatte einige ärgerliche Probleme, die darauf zurückzuführen waren, dass ich den Marshaller und seine Regeln nicht verstanden hatte, also hoffte ich, eine gute Dokumentation zu diesem Thema zu finden. – Odrade

2

Es gibt ein nützliches Tool zum Generieren der Pinvoke-Signaturen für eine bestimmte Bibliothek. Es hat Verknüpfungen für Win32 Apis, aber Sie können Ihre eigenen Dateien übergeben.

pinvoke interop assistant

ich bin nicht sicher, wie viel es mit dem Verständnis der Mappings helfen, aber zumindest könnte es Ihnen Arbeitsbeispiele geben. Ich habe es verwendet, um eine C# -Schnittstelle zu einigen unserer nativen Code zu generieren, und es hat gut funktioniert.

Die codeplex site scheint einige nützliche Diagnose-Tools zu haben, die ich auch geben werde.