|
Primero, crea un proyecto DLL en C++
Modifica CPPTest.cpp para que lea: CPPTest.cpp: Define el punto de entrada para la aplicación DLL.
// #include "stdafx.h" #include #ifdef _MANAGED #pragma gestionado (empujar, salir) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
)
{ devolver TRUE;
} externo "C"
{ struct TestStruct
{ int i; carácter* fuerza; }; _declspec(dllexport) size_t __stdcall GetStringLength(char* & str)
{ devolver strlen(strlen);
} _declspec(dllexport) int __stdcall AddTwoNumber(const int a,const int b)
{ devolver a+b;
} _declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{ usando el espacio de nombres STD; Cout<<s.i<<endl; cout<<s.str<<endl; s.i=54321; s.str="¡Están todos muertos!";
}
} #ifdef _MANAGED #pragma gestionado (pop) #endif
2. Crear un proyecto de prueba en C#
Modificar el contenido del programa para: usando Sistema; usando System.Collections.Generic; usando System.Text; usando System.Runtime.InteropServices; namespace ConsoleApplicationTestCSharp
{ Programa de la clase
{ [DllImport("CPPTest.dll")] static extern int GetStringLength(ref string str); [DllImport("CPPTest.dll")] static extern int AddTwoNumber(int a, int b); [DllImport("CPPTest.dll")] vacío externo estático StructTest (ref TestStruct s); vacío estático Main(string[] args)
{ string testString = "¡JAJA! Soy una cuerda de prueba"; Console.WriteLine("length(C++)=" + GetStringLength(ref testString). ToString()); Console.WriteLine("length(C#)=" + testString.Length.ToString()); Consola.WriteLine("a+b(C++)=" + AddDosNúmero(10, 1000)); Console.WriteLine("a+b(C#)=" + (10 + 1000)); TestStruct s = new TestStruct(); s.i = 12345; s.str = "¡Ve a disparar a los males en las montañas!"; StructTest (ref s); Consola.WriteLine(s.i); Console.WriteLine(s.str); Consola.ReadKey();
} [StructLayout(LayoutKind.Sequential)] estructura pública TestStruct
{ público int i; fuerza de cuerda pública;
}
}
} Fíjate en la etiqueta DllImportAttribute arribamétodo。 Resultado de la carrera: longitud(C++)=24 longitud(C#)=24 a+b(C++)=1010 a+b(C#)=1010
12345 ¡Ve a disparar a los males en las montañas!
54321 ¡Están todos muertos! Tercero, una explicación de varias palabras clave en C/C++ _declspec __stdcall Extern
"C" (dllexport) exporta desde la DLL usando __declspec (dllexport). </s.str<<endl; </s.i<<endl;
|