|
Tout d’abord, créez un projet DLL C++
Modifiez CPPTest.cpp pour qu’il s’affiche : CPPTest.cpp : Définit le point d’entrée de l’application DLL.
// #include « stdafx.h » #include #ifdef _MANAGED #pragma réussi (poussée, recul) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpRéservé
)
{ retour TRUE ;
} extern « C »
{ struct TestStruct
{ int i ; char* str ; }; _declspec(dllexport) size_t __stdcall GetStringLength(char* & str)
{ retour strlen(strlen) ;
} _declspec(dllexport) int __stdcall AddTwoNumber(const int a,const int b)
{ retourner a+b ;
} _declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{ en utilisant l’espace de noms STD ; Cout<<s.i<<endl ; cout<<s.str<<endl ; s.i=54321 ; s.str="Ils sont tous morts ! » ;
}
} #ifdef _MANAGED #pragma géré (pop) #endif
2. Créer un projet test C#
Modifier le contenu du programme pour : utilisant System ; utilisant System.Collections.Generic ; en utilisant System.Text ; utilisant System.Runtime.InteropServices ; Espace de noms ConsoleApplicationTestCSharp
{ Programme de la classe
{ [DllImport(« CPPTest.dll »)] static extern int GetStringLength(ref string str) ; [DllImport(« CPPTest.dll »)] static extern int AddTwoNumber(int a, int b) ; [DllImport(« CPPTest.dll »)] vide externe statique StructTest (réf. TestStruct s) ; vide statique Main(string[] args)
{ string testString = « HAHA ! Je suis une chaîne d’essai » ; Console.WriteLine(« length(C++)= » + GetStringLength(ref testString). ToString()) ; Console.WriteLine(« length(C#)= » + testString.Length.ToString()) ; Console.WriteLine(« a+b(C++)= » + AddTwoNumber(10, 1000)) ; Console.WriteLine(« a+b(C#)= » + (10 + 1000)) ; TestStruct s = new TestStruct() ; s.i = 12345 ; s.str = « Va tirer sur les méfaits sur les montagnes ! » ; StructTest (réf. s) ; Console.WriteLine(s.i) ; Console.WriteLine(s.str) ; Console.ReadKey() ;
} [StructLayout(LayoutKind.Sequential)] structure publique TestStruct
{ public int i ; cordes publiques ;
}
}
} Notez le tag DllImportAttribute ci-dessusméthode。 Résultat de la série : length(C++)=24 longueur(Do#)=24 a+b(C++)=1010 a+b(C#)=1010
12345 Allez tirer sur les méchants sur les montagnes !
54321 Ils sont tous morts ! Troisièmement, une explication de plusieurs mots-clés en C/C++ _declspec __stdcall Extern
« C » (dllexport) exporte depuis la DLL en utilisant __declspec (dllexport). </s.str<<endl ; </s.i<<endl ;
|