|
Først, lag et C++ DLL-prosjekt
Endre CPPTest.cpp til å lese: CPPTest.cpp: Definerer inngangspunktet for DLL-applikasjonen.
// #include "stdafx.h" #include #ifdef _MANAGED #pragma klarte (skyv, av) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
)
{ returner TRUE;
} ekstern "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)
{ returner a+b;
} _declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{ bruk av namespace std; cout<<s.i<<endl; cout<<s.str<<endl; s.i=54321; s.str="De er alle døde!";
}
} #ifdef _MANAGED #pragma managed(pop) #endif
2. Opprette et C#-testprosjekt
Endre programmets innhold til: ved bruk av System; ved bruk av System.Collections.Generic; ved bruk av System.Text; bruk av System.Runtime.InteropServices; navnerom ConsoleApplicationTestCSharp
{ Klasseprogram
{ [DllImport("CPPTest.dll")] statisk ekstern int GetStringLength (ref streng str); [DllImport("CPPTest.dll")] statisk ekstern int AddTwoNumber(int a, int b); [DllImport("CPPTest.dll")] statisk ekstern void StructTest (ref TestStruct s); statisk void Main(string[] args)
{ string testString = "HAHA! Jeg er en teststreng»; 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å og skyt ondskap på fjellene!"; StructTest (referanser); Console.WriteLine(s.i); Console.WriteLine(s.str); Console.ReadKey();
} [StructLayout(LayoutKind.Sequential)] offentlig struktur TestStruct
{ offentlig int I; offentlig strengstyrke;
}
}
} Merk DllImportAttribut-taggen ovenformetode。 Løpsresultat: length(C++)=24 lengde(C#)=24 a+b(C++)=1010 a+b(C#)=1010
12345 Gå for å skyte ondskap på fjellene!
54321 De er alle døde! For det tredje, en forklaring av flere nøkkelord i C/C++ _declspec __stdcall Ekstern
"C" (dllexport) eksporterer fra DLL-en ved hjelp av __declspec (dllexport). </s.str<<endl; </s.i<<endl;
|