|
Αρχικά, δημιουργήστε ένα έργο DLL C++
Τροποποιήστε CPPTest.cpp ως εξής: CPPTest.cpp : Καθορίζει το σημείο εισόδου για την εφαρμογή DLL.
// #include "stdafx.h" #include #ifdef _MANAGED #pragma διαχείριση (push, off) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
)
{ επιστροφή TRUE?
} εξωτερικό "C"
{ struct TestStruct
{ int i; char* str; }; _declspec(dllexport) size_t __stdcall GetStringLength(char* & str)
{ επιστροφή strlen(str);
} _declspec(dllexport) int __stdcall AddTwoNumber(const int a,const int b)
{ επιστροφή a+b;
} _declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{ χρησιμοποιώντας τον χώρο ονομάτων std. cout<<s.i<<endl; cout<<s.str<<endl; s.i=54321; s.str="Είναι όλοι νεκροί!";
}
} #ifdef _MANAGED #pragma managed (pop) #endif
2. Δημιουργήστε ένα δοκιμαστικό έργο C#
Τροποποιήστε το περιεχόμενο του Προγράμματος ώστε: χρησιμοποιώντας το Σύστημα. χρησιμοποιώντας το System.Collections.Generic. χρησιμοποιώντας το System.Text. χρησιμοποιώντας το System.Runtime.InteropServices. χώρος ονομάτων ConsoleApplicationTestCSharp
{ Πρόγραμμα τάξης
{ [DllImport("CPPTest.dll")] στατικό εξωτερικό int GetStringLength(ref string str); [DllImport("CPPTest.dll")] στατικό εξωτερικό int AddTwoNumber(int a, int b); [DllImport("CPPTest.dll")] στατικό εξωτερικό κενό StructTest(ref TestStruct s); στατικό κενό Main(string[] args)
{ string testString = "ΧΑΧΑ! Είμαι μια δοκιμαστική χορδή». Console.WriteLine("μήκος(C++)=" + GetStringLength(ref testString). ToString()); Console.WriteLine("μήκος(C#)=" + testString.Length.ToString()); Console.WriteLine("a+b(C++)=" + AddTwoNumber(10, 1000)); Console.WriteLine("a+b(C#)=" + (10 + 1000)); TestStruct s = νέα TestStruct(); s.i = 12345; s.str = "Πήγαινε να πυροβολήσεις κακά σε βουνά!"; StructTest(ref s); Console.WriteLine(s.i); Console.WriteLine(s.str); Κονσόλα.ReadKey();
} [StructLayout(LayoutKind.Sequential)] δημόσια δομή TestStruct
{ δημόσιο int i; δημόσια χορδή str;
}
}
} Σημειώστε την ετικέτα DllImportAttribute παραπάνωμέθοδος。 Αποτέλεσμα εκτέλεσης: μήκος(C++)=24 μήκος(C#)=24 a+b(C++)=1010 α+β(C#)=1010
12345 Πηγαίνετε να πυροβολήσετε κακά σε βουνά!
54321 Είναι όλοι νεκροί! Τρίτον, μια επεξήγηση πολλών λέξεων-κλειδιών σε C/C++ _declspec __stdcall εξωτερικός
"ντο" (dllexport) εξάγει από το DLL χρησιμοποιώντας __declspec (dllexport). </s.str<<endl; </s.i<<endl;
|