|
Maak eerst een C++ DLL-project aan
Wijzig CPPTest.cpp om te lezen: CPPTest.cpp : Definieert het toegangspunt voor de DLL-toepassing.
// #include "stdafx.h" #include #ifdef _MANAGED #pragma het gemanaged (duwen, weg) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
)
{ return TRUE;
} externe "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)
{ A+B terugbrengen;
} _declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{ gebruikmakend van namespace std; cout<<s.i<<endl; cout<<s.str<<endl; s.i=54321; s.str="Ze zijn allemaal dood!";
}
} #ifdef _MANAGED #pragma managed(pop) #endif
2. Maak een C#-testproject
Wijzig de inhoud van het programma om: met behulp van System; met behulp van System.Collections.Generic; gebruik van System.Text; gebruik van System.Runtime.InteropServices; naamruimte ConsoleApplicationTestCSharp
{ Klasprogramma
{ [DllImport("CPPTest.dll")] statische externe int GetStringLength (ref string str); [DllImport("CPPTest.dll")] statisch extern int AddTwoNumber(int a, int b); [DllImport("CPPTest.dll")] statische externe void StructTest (ref TestStruct s); statische void Main(string[] args)
{ string testString = "HAHA! Ik ben een teststring"; 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 = nieuwe TestStruct(); s.i = 12345; s.str = "Ga kwaad schieten op bergen!"; StructTest (ref s); Console.WriteLine(s.i); Console.WriteLine(s.str); Console.ReadKey();
} [StructLayout(LayoutKind.Sequentiell)] publieke struct TestStruct
{ Publiek Int I; publieke snaarstr;
}
}
} Let op de tag DllImportAttribute hierbovenmethode。 Run resultaat: length(C++)=24 lengte(C#)=24 a+b(C++)=1010 a+b(C#)=1010
12345 Ga kwaad schieten op bergen!
54321 Ze zijn allemaal dood! Ten derde een uitleg van verschillende trefwoorden in C/C++ _declspec __stdcall extern
"C" (dllexport) exporteert vanuit de DLL met __declspec (dllexport). </s.str<<endl; </s.i<<endl;
|