Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 19233|Respuesta: 0

[WinForm] Cómo llamar a métodos en DLLs en C/C++ en C#

[Copiar enlace]
Publicado en 5/2/2015 20:52:39 | | | |

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;




Anterior:Construye un servidor de correo con Winmail
Próximo:Método DLL de referencia de estado dinámico en C# (Reimpresión)
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com