Crear una DLL y llamarla en otro lenguaje
Publicado por Meta (22 intervenciones) el 27/07/2018 10:03:45
Hola:
Quiero hacer esto desce cero con Visual studio Community 2017. Creo una dll en Win32 C++. En él solo hay dos cosas, una fórmula matemática y un mensaje. Por ejemplo.
Fórmula matemática:
2 + 3
Mensaje:
Hola. Soy una DLL Win32.
Una vez creada una dll en C++ Win32 con lo indicado arriba, quiero ahora crear otro proyecto con Windows Form hecho bajo el lenguaje C#. En el formulario tiene incluido un label1 para mostrar el mensaje y otro label2 para mostrar el resultado de la suma.
Cualquier cosa que se entienda, lo repito de otra manera. Lo hice así tan sencillo para aprender de una vez y rápido como hacerlo.
Código C++:
En la última línea donde pone TEXT pone error indicado abajo.
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error (activo) E0120 el tipo de valor devuelto no coincide con el tipo de función pepe c:\Users\Usuario\Documents\Visual Studio 2017\Projects\pepe\pepe\pepe.cpp 28
En el mismo proyecto de la dll creo la interfaz C#:
Código C#:
Como dije antes, el problema está en el TEXT que dice el error: el tipo de valor devuelto no coincide con el tipo de función.
¿Alguna idea?
Saludos.
Quiero hacer esto desce cero con Visual studio Community 2017. Creo una dll en Win32 C++. En él solo hay dos cosas, una fórmula matemática y un mensaje. Por ejemplo.
Fórmula matemática:
2 + 3
Mensaje:
Hola. Soy una DLL Win32.
Una vez creada una dll en C++ Win32 con lo indicado arriba, quiero ahora crear otro proyecto con Windows Form hecho bajo el lenguaje C#. En el formulario tiene incluido un label1 para mostrar el mensaje y otro label2 para mostrar el resultado de la suma.
Cualquier cosa que se entienda, lo repito de otra manera. Lo hice así tan sencillo para aprender de una vez y rápido como hacerlo.
Código C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// $nombredeproyecto$.cpp: define las funciones exportadas de la aplicación DLL.
//
#include "stdafx.h"
extern "C" {
__declspec(dllexport) int WINAPI Suma(int, int);
__declspec(dllexport) LPTSTR WINAPI Mensaje();
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
int WINAPI Suma(int a, int b) { return a + b; }
LPTSTR WINAPI Mensaje() { return TEXT("Hola. Soy una DLL Win32."); }
En la última línea donde pone TEXT pone error indicado abajo.
1
LPTSTR WINAPI Mensaje() { return TEXT("Hola. Soy una DLL Win32."); }
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error (activo) E0120 el tipo de valor devuelto no coincide con el tipo de función pepe c:\Users\Usuario\Documents\Visual Studio 2017\Projects\pepe\pepe\pepe.cpp 28
En el mismo proyecto de la dll creo la interfaz C#:
Código C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
using System.Runtime.InteropServices; // No olvidar.
using System.Windows.Forms;
namespace Prueba_dll_cs_01
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
label1.Text = Marshal.PtrToStringAuto(PEPE.Mensaje());
label2.Text = PEPE.Suma(1764, -764).ToString();
}
}
internal class PEPE
{
[DllImport("pepe.dll", EntryPoint = "_Suma@8")]
extern static public int Suma(int a, int b);
[DllImport("pepe.dll", EntryPoint = "_Mensaje@0")]
extern static public IntPtr Mensaje();
}
}
Como dije antes, el problema está en el TEXT que dice el error: el tipo de valor devuelto no coincide con el tipo de función.
¿Alguna idea?
Saludos.
Valora esta pregunta
0