|
Pertama, buat proyek DLL C++
Ubah CPPTest.cpp untuk membaca: CPPTest.cpp : Menentukan titik masuk untuk aplikasi DLL.
// #include "stdafx.h" #include #ifdef _MANAGED #pragma dikelola (dorong, mati) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpDicadangkan
)
{ mengembalikan TRUE;
} ekstern "C"
{ struct TestStruct
{ int i; char* str; }; _declspec(dllexport) size_t __stdcall GetStringLength(char* & str)
{ mengembalikan strlen(str);
} _declspec(dllexport) int __stdcall AddTwoNumber(const int a,const int b)
{ mengembalikan a+b;
} _declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{ menggunakan namespace std; cout<<s.i<<endl; cout<<s.str<<endl; s.i = 54321; s.str="Mereka semua sudah mati!";
}
} #ifdef _MANAGED #pragma dikelola(pop) #endif
2. Buat proyek uji coba C#
Ubah konten Program menjadi: menggunakan Sistem; menggunakan System.Collections.Generic; menggunakan System.Text; menggunakan System.Runtime.InteropServices; namespace ConsoleApplicationTestCSharp
{ Program kelas
{ [dllImport("CPPTest.dll")] statis extern int GetStringLength(ref string str); [dllImport("CPPTest.dll")] statis luar biasa int AddTwoNumber(int a, int b); [dllImport("CPPTest.dll")] statis luar biasa void StructTest (ref TestStruct s); static void Main(string[] args)
{ string testString = "HAHA! Saya adalah string uji"; 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 = TestStruct(); baru s.i = 12345; s.str = "Pergi untuk menembak kejahatan di gunung!"; StructTest(ref s); Konsol.WriteLine(s.i); Console.WriteLine(s.str); Konsol.BacaKunci();
} [StructLayout(LayoutKind.Sequential)] struktur publik TestStruct
{ publik int i; senar publik str;
}
}
} Perhatikan tag DllImportAttribute di atasMetode。 Hasil jalan: panjang (C++) = 24 panjang (C #) = 24 a+b(C++)=1010 a+b(C#)=1010
12345 Pergi untuk menembak kejahatan di gunung!
54321 Mereka semua sudah mati! Ketiga, penjelasan beberapa kata kunci dalam C/C++ _declspec __stdcall luar
"C" (dllexport) dari DLL menggunakan __declspec (dllexport). </s.str<<endl; </s.i<<endl;
|