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++:
Código
// $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.
Código
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#:
Código
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.