|
Esiteks loo C++ DLL projekt
Muuda CPPTest.cpp järgmiselt: CPPTest.cpp : Määratleb DLL-rakenduse sisenemispunkti.
// #include "stdafx.h" #include #ifdef _MANAGED #pragma sai hakkama (lükkamine, eemaldumine) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
)
{ return TRUE;
} ekstern "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)
{ tagasta a+b;
} _declspec(dllexport) void __stdcall StructTest(TestStruct&s)
{ kasutades nimeruumi std; cout<<s.i<<endl; cout<<s.str<<endl; s.i=54321; s.str="Nad on kõik surnud!";
}
} #ifdef _MANAGED #pragma suutis (pop) #endif
2. Loo C# testiprojekt
Muuda programmi sisu järgmiselt: kasutades süsteemi; kasutades System.Collections.Generic; kasutades System.Texti; kasutades System.Runtime.InteropServices; nimeruum ConsoleApplicationTestCSharp
{ Klassiprogramm
{ [DllImport("CPPTest.dll")] staatiline ekstern int GetStringLength (viide string str); [DllImport("CPPTest.dll")] staatiline ekstern int AddTwoNumber(int a, int b); [DllImport("CPPTest.dll")] staatiline ekstern void StructTest (viide TestStruct s); staatiline tühjus Main(string[] args)
{ string testString = "HAHA! Ma olen testnöör"; Console.WriteLine("length(C++)=" + GetStringLength(viide 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 = uus TestStruct(); s.i = 12345; s.str = "Mine tulistama kurje mägedele!"; StructTest (viide s); Console.WriteLine(s.i); Console.WriteLine(s.str); Console.ReadKey();
} [StructLayout(LayoutKind.Sequential)] public struct TestStruct
{ avalik intellekt I; avalik keelpillide str;
}
}
} Pane tähele ülaltoodud DllImportAttribute siltiMeetod。 Jooksu tulemus: pikkus(C++)=24 pikkus(C#)=24 a+b(C++)=1010 a+b(C#)=1010
12345 Mine tulistama kurje mägedele!
54321 Nad on kõik surnud! Kolmandaks, mitme C/C++ märksõna selgitus _declspec __stdcall välised
"C" (dllexport) eksporditakse DLL-ist __declspec abil (dllexport). </s.str<<endl; </s.i<<endl;
|