Wie verwende ich DLLImport mit Strukturen als Parameter in C #?

8

Alle Beispiele, die ich mithilfe von DLLImport finden kann, um C ++ - Code von C # aufzurufen, übergibt Vor-und Zurück. Ich kann diese Beispiele gut funktionieren lassen. Die Methode, die ich brauche, nimmt zwei Strukturen als Importparameter, und mir ist nicht ganz klar, wie ich das schaffen kann.

Hier ist, woran ich arbeiten muss:

Ich besitze den C ++ - Code, damit ich alle notwendigen Änderungen und Ergänzungen vornehmen kann.

Eine Anwendung von Drittanbietern wird meine DLL beim Start laden und erwartet, dass der DLLExport auf eine bestimmte Weise definiert wird, so dass ich die Methodensignatur, die exportiert wird, nicht wirklich ändern kann.

Die C # -App, die ich erstelle, wird als Wrapper verwendet, damit ich dieses C ++ - Stück in einige unserer anderen Anwendungen integrieren kann, die alle in C # geschrieben sind.

Die C ++ - Methodensignatur, die ich aufrufen muss, sieht so aus

%Vor%

Und MathInputStructType ist wie folgt definiert

%Vor%     
Jonathan Beerhalter 23.03.2009, 18:47
quelle

4 Antworten

9

Das MSDN-Thema Passing Structures enthält eine gute Einführung zum Übergeben von Strukturen an nicht verwalteten Code. Sie sollten auch Marshaling von Daten mit Platform Invoke überprüfen und Marshaling Arrays von Typen .

    
Jim Mischel 23.03.2009, 20:13
quelle
4

Aus der von Ihnen geposteten Deklaration sieht Ihr C # -Code ungefähr so ​​aus:

%Vor%

Abhängig von der Struktur von MathInputStructType und MathOutputStructType in C ++ müssen Sie diese Strukturdeklarationen ebenfalls zuordnen, damit sie korrekt marshallen.

    
casperOne 23.03.2009 18:52
quelle
3

Für die Struktur:

%Vor%     
leppie 23.03.2009 19:03
quelle
2

Vielleicht möchten Sie sich dieses Projekt auf CodePlex, Ссылка ansehen. Es sollte Ihnen helfen, die Strukturen korrekt zu marshallen.

    
LanceSc 23.03.2009 19:12
quelle

Tags und Links