|
Zuerst erstelle ein C++-DLL-Projekt
Ändern Sie CPPTest.cpp, um zu lesen: CPPTest.cpp : Definiert den Einstiegspunkt für die DLL-Anwendung.
// #include "stdafx.h" #include #ifdef _MANAGED #pragma geschafft (abdrücken, abdrücken) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
)
{ return TRUE;
} externes "C"
{ struct TestStruct
{ Int I; Char* STR; }; _declspec(dllexport) size_t __stdcall GetStringLength(char* & str)
{ Return Strlen (STR);
} _declspec(dllexport) int __stdcall AddTwoNumber(const int a,const int b)
{ Zurück A+B;
} _declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{ Verwendung von Namespace STD; cout<<s.i<<endl; cout<<s.str<<endl; s.i=54321; s.str="Sie sind alle tot!";
}
} #ifdef _MANAGED #pragma managed(pop) #endif
2. Erstellen Sie ein C#-Testprojekt
Ändern Sie den Programminhalt zu: mit System; mit System.Collections.Generic; mit System.Text; Verwendung von System.Runtime.InteropServices; Namespace ConsoleApplicationTestCSharp
{ Klassenprogramm
{ [DllImport("CPPTest.dll")] statischer externer int GetStringLength (ref string str); [DllImport("CPPTest.dll")] statische externe Int AddTwoNumber(int a, int b); [DllImport("CPPTest.dll")] statischer externer Void StructTest (ref TestStruct s); statisches Void Haupt(string[] args)
{ string testString = "HAHA! Ich bin eine Test-Saite"; 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 = neuer TestStruct(); s.i = 12345; s.str = "Geh, um Übel auf Berge zu schießen!"; StructTest (ref s); Console.WriteLine(s.i); Console.WriteLine(s.str); Console.ReadKey();
} [StructLayout(LayoutKind.Sequentiell)] öffentliche struct TestStruct
{ öffentliche Int I; öffentliche Saitenstärke;
}
}
} Beachten Sie das oben genannte DllImportAttribut-TagMethode。 Laufergebnis: length(C++)=24 length(C#)=24 a+b(C++)=1010 a+b(C#)=1010
12345 Geh, um auf Berge Böse zu schießen!
54321 Sie sind alle tot! Drittens eine Erklärung mehrerer Schlüsselwörter in C/C++ _declspec __stdcall extern
"C" (dllexport) exportiert von der DLL mit __declspec (dllexport). </s.str<<endl; </s.i<<endl;
|