Comment puis-je utiliser DLLImport avec les structures en tant que paramètres en C#?
Tous les exemples que je peux trouver de l'aide DLLImport d'appeler du code C++ à partir de C# passe ints d'avant en arrière. Je peux obtenir ces exemples fonctionne très bien. La méthode que j'ai besoin d'appel prend deux structures que ses paramètres d'import, et je ne suis pas très clair comment je peux faire ce travail.
Voici ce que j'ai eu à travailler avec:
Je possède le code C++, donc je peux faire toutes les modifications/ajouts à ce que j'en ai besoin.
Un tiers de l'application va charger mes DLL au démarrage et qui attend la DLLExport être défini d'une certaine façon, donc je ne peux pas vraiment changer la signature de la méthode c'est l'obtention d'exportée.
L'application en C# je suis en train de construire va être utilisé comme un wrapper afin que je puisse intégrer cette C++ morceau dans certains de nos autres applications, qui sont tous écrits en C#.
Le C++ signature de la méthode, je dois appeler ressemble à ceci
DllExport int Calculate (const MathInputStuctType *input,
MathOutputStructType *output, void **formulaStorage)
Et MathInputStructType est définie comme suit
typedef struct MathInputStuctTypeS {
int _setData;
double _data[(int) FieldSize];
int _setTdData;
} MathInputStuctType;
OriginalL'auteur Jonathan Beerhalter | 2009-03-23
Vous devez vous connecter pour publier un commentaire.
La rubrique MSDN Le Passage De Structures a une bonne introduction aux structures de passage à du code non managé. Vous aurez également besoin de regarder Regroupement de Données avec Plate-forme de l'Invoquer, et Marshaling des Tableaux de Types.
OriginalL'auteur Jim Mischel
De la déclaration que vous avez posté, votre code C# va ressembler à quelque chose comme ceci:
En fonction de la structure de MathInputStructType et MathOutputStructType en C++, vous allez avoir à attribuer ces structure déclarations en tant que bien de sorte qu'ils maréchal correctement.
"vous allez avoir à attribuer ces structure déclarations en tant que bien de sorte qu'ils maréchal correctement." À droite, c'est la partie que je ne comprends pas vraiment. J'ai ajouté de la structure à ma question.
OriginalL'auteur casperOne
Pour la structure:
Qui doit être déduit (je suppose, comme le marshaller est assez bon).
OriginalL'auteur leppie
Vous voudrez peut-être regarder à ce projet sur CodePlex, http://www.codeplex.com/clrinterop/Release/ProjectReleases.aspx?ReleaseId=14120. Il devrait vous aider à regrouper les structures correctement.
Ne savais pas c'était que restrictive, désolé.
Pas de soucis, merci pour l'aide.
Au lieu d'essayer d'ouvrir une DLL, vous pouvez utiliser le SigImp Traduire Extrait de l'onglet pour voir comment un certain code C++ doit être défini en C#.
OriginalL'auteur LanceSc