|
Luo ensin C++ DLL -projekti
Muokkaa CPPTest.cpp seuraavasti: CPPTest.cpp : Määrittelee DLL-sovelluksen sisäänpääsypisteen.
// #include "stdafx.h" #include #ifdef _MANAGED #pragma onnistunut (työntö, pois) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
)
{ return TRUE;
} ulkopuolinen "C"
{ struct TestStruct
{ int i; char* str; }; _declspec(dllexport) size_t __stdcall GetStringLength(char* & str)
{ Return strlen (strlen);
} _declspec(dllexport) int __stdcall AddTwoNumber(const int a,const int b)
{ palauta a+b;
} _declspec(dllexport) void __stdcall StructTest(TestStruct&s)
{ käyttäen nimiavaruutta STD; cout<<s.i<<endl; cout<<s.str<<endl; s.i=54321; s.str="He ovat kaikki kuolleet!";
}
} #ifdef _MANAGED #pragma hallittu(pop) #endif
2. Luo C#-testiprojekti
Muokkaa ohjelman sisältöä seuraavasti: käyttämällä Systemiä; käyttäen System.Collections.Generic-tiedostoa; käyttäen System.Textiä; käyttäen System.Runtime.InteropServices; nimiavaruus ConsoleApplicationTestCSharp
{ luokkaohjelma
{ [DllImport("CPPTest.dll")] staattinen ulkoinen int GetStringLength (viite merkkijonon str); [DllImport("CPPTest.dll")] staattinen ulkoinen int AddTwoNumber(int a, int b); [DllImport("CPPTest.dll")] staattinen ulkoinen void StructTest(viitte TestStruct s); staattinen void Pää(merkkijono[] args)
{ string testString = "HAHA! Olen testijono"; 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 = uusi TestStruct(); s.i = 12345; s.str = "Mene ampumaan pahuutta vuorille!"; StructTest(viite s); Console.WriteLine(s.i); Console.WriteLine(s.str); Console.ReadKey();
} [StructLayout(LayoutKind.Sequential)] public struct TestStruct
{ julkinen int i; julkinen jousivoima;
}
}
} Huomaa yllä oleva DllImportAttribute-tunnistemenetelmä。 Juoksutulos: pituus(C++)=24 pituus(C#)=24 a+b(C++)=1010 a+b(C#)=1010
12345 Mene ampumaan pahoja vuorille!
54321 He ovat kaikki kuolleet! Kolmanneksi, selitys useista avainsanoista C/C++:ssa _declspec __stdcall ulkopuolinen
"C" (dllexport) vienti DLL:stä käyttäen __declspec (dllexport). </s.str<<endl; </s.i<<endl;
|