|
İlk olarak, bir C++ DLL projesi oluşturun
CPPTest.cpp şöyle değiştirin: CPPTest.cpp : DLL uygulamasının giriş noktasını tanımlar.
// #include "stdafx.h" #include #ifdef _MANAGED #pragma başardı (it, kapat) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
)
{ return TRUE;
} dışa "C"
{ struct TestStruct
{ int i; char* str; }; _declspec(dllexport) size_t __stdcall GetStringLength(char* & str)
{ geri strlen(strlen);
} _declspec(dllexport) int __stdcall AddTwoNumber(const int a,const int b)
{ return a+b;
} _declspec(dllexport) void __stdcall StructTest(TestStruct&s)
{ isim alanı STD kullanılarak; cout<<s.i<<endl; cout<<s.str<<endl; s.i=54321; s.str="Hepsi öldü!";
}
} #ifdef _MANAGED #pragma yönetildi(pop) #endif
2. Bir C# test projesi oluşturun
Program içeriğini şu şekilde değiştirin: System kullanmak; System.Collections.Generic kullanılarak; System.Text kullanarak; System.Runtime.InteropServices kullanarak; namespace ConsoleApplicationTestCSharp
{ Sınıf Programı
{ [DllImport("CPPTest.dll")] statik dış dış int GetStringLength (referans string str); [DllImport("CPPTest.dll")] statik dış dış int AddTwoNumber(int a, int b); [DllImport("CPPTest.dll")] static extern void StructTest (ref TestStruct s); statik boşluk Ana (dize[] args)
{ string testString = "HAHA! Ben bir test stiliyim"; 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 = yeni TestStruct(); s.i = 12345; s.str = "Dağlara kötülükleri vurmaya git!"; StructTest (referans s); Console.WriteLine(s.i); Console.WriteLine(s.str); Console.ReadKey();
} [Yapı Düzeni(Düzen Türü.Dizilimi)] public struct TestStruct
{ kamu int i; halka açık yaylı str;
}
}
} Yukarıdaki DllImportAttribute etiketine dikkat edinyöntem。 Koşu sonucu: uzunluk(C++)=24 length(C#)=24 a+b(C++)=1010 a+b(C#)=1010
12345 Dağlarda kötülükleri vurmaya gidin!
54321 Hepsi öldü! Üçüncü olarak, C/C++ dilinde birkaç anahtar kelimenin açıklaması _declspec __stdcall dış kaynak
"C" (dllexport) DLL'den __declspec (dllexport) kullanılarak ihraç edilir. </s.str<<endl; </s.i<<endl;
|