|
Först, skapa ett C++ DLL-projekt
Ändra CPPTest.cpp för att läsa: CPPTest.cpp : Definierar ingångspunkten för DLL-applikationen.
// #include "stdafx.h" #include #ifdef _MANAGED #pragma klarade (tryck, av) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
)
{ returnera TRUE;
} extern "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)
{ återvända A+B;
} _declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{ använda namnrymden STD; Cout<<s.i<<endl; cout<<s.str<<endl; s.i=54321; s.str="De är alla döda!";
}
} #ifdef _MANAGED #pragma managed(pop) #endif
2. Skapa ett C#-testprojekt
Ändra programmets innehåll till: med System; med System.Collections.Generic; med System.Text; använda System.Runtime.InteropServices; namnrymden ConsoleApplicationTestCSharp
{ Klassprogram
{ [DllImport("CPPTest.dll")] statisk extern int GetStringLength (ref string str); [DllImport("CPPTest.dll")] statisk extern int AddTwoNumber(int a, int b); [DllImport("CPPTest.dll")] statisk extern void StructTest (ref TestStruct s); statiskt tomrum Main(string[] args)
{ strängtestSträng = "HAHA! Jag är en teststräng"; 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 = ny TestStruct(); s.i = 12345; s.str = "Gå och skjut onda på bergen!"; StructTest (referenser); Console.WriteLine(s.i); Console.WriteLine(s.str); Console.ReadKey();
} [StructLayout(LayoutKind.Sequentiell)] publik struktur TestStruct
{ offentlig int i; offentlig strängstyrka;
}
}
} Notera taggen DllImportAttribute ovanmetod。 Resultat av löpning: längd(C++)=24 längd(C#)=24 a+b(C++)=1010 a+b(C#)=1010
12345 Gå och skjut onda på bergen!
54321 De är alla döda! För det tredje, en förklaring av flera nyckelord i C/C++ _declspec __stdcall extern
"C" (dllexport) exporterar från DLL med hjälp av __declspec (dllexport). </s.str<<endl; </s.i<<endl;
|