• Miércoles 20 de Noviembre de 2024, 14:28

Autor Tema:   messageBox error lnk2028  (Leído 3323 veces)

xouba

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
messageBox error lnk2028
« en: Sábado 24 de Diciembre de 2011, 16:05 »
0
Hola a todos, espero estar en el foro correcto ya que mi duda es la siguiente. He realizado una solución en visual studio 2010 que consta de un proyecto de biblioteca de clases en c++(mi Entrenar.dll) y un proyecto de windows forms en c# (la interfaz). He utilizado dll(import)de la siguiente manera.

Entrenar.h
Código: C++
  1.  
  2. #pragma once
  3.  
  4. using namespace System;
  5.  
  6.  
  7.  
  8. extern "C"
  9. {
  10.         __declspec(dllexport) int __cdecl Error(char* Mensaje,char* Titulo, int  tipo);
  11. }
  12.  
  13. class __declspec(dllexport) Func_Exportadas
  14.         {
  15.         public:
  16.                 static int Error    (char* Mensaje,char* Titulo, int  tipo);
  17. };

Entrenar.cpp
Código: C++
  1. #include "Stdafx.h"
  2. #include <windows.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <math.h>
  6. #include <time.h>
  7. #include "Entrenar.h"
  8.  
  9. int  Error          (char* Mensaje, char* Titulo, int  tipo)    {return Func_Exportadas::Error(Mensaje,Titulo,tipo);};
  10.  
  11.  
  12. int  Func_Exportadas::Error(char* Mensaje,char* Titulo,int tipo)
  13. {      
  14.        
  15.        
  16.         LPCTSTR Mensaje_Cast;
  17.         Mensaje_Cast=(LPCTSTR)Mensaje;
  18.         LPCTSTR Titulo_Cast;
  19.         Titulo_Cast=(LPCTSTR)Titulo;
  20.        
  21.        
  22.  switch (tipo)
  23.  {
  24.                        
  25.         case  1:   MessageBox(NULL,Mensaje_Cast,Titulo_Cast,MB_ICONSTOP|
  26.                                                         MB_TASKMODAL);
  27.                                   return(FALSE);
  28.         case  2:   MessageBox(NULL,Mensaje_Cast,Titulo_Cast,MB_ICONINFORMATION|
  29.                                                         MB_TASKMODAL);
  30.                                   return(FALSE);
  31.         case  3:   MessageBox(NULL,Mensaje_Cast,Titulo_Cast,MB_ICONSTOP|
  32.                                                         MB_TASKMODAL);
  33.                                   return(FALSE);
  34.         case  4:   MessageBox(NULL,Mensaje_Cast,Titulo_Cast,MB_ICONEXCLAMATION|
  35.                                                         MB_TASKMODAL);
  36.                                   return(FALSE);
  37.                                  
  38.  }
  39.  return (TRUE);
  40. }

interfaz.cs
Código: C#
  1. namespace Interfaz
  2. {
  3.     public partial class Fm_Principal : Form
  4.     {
  5.  
  6.  
  7.         public Fm_Principal()
  8.         {
  9.             InitializeComponent();
  10.          }
  11.  
  12.  [DllImport("Entrenar.dll")]
  13.         public static extern int Error(string Mensaje, string Titulo, int tipo);
  14.  
  15. Error("Hola","prueba",2);
  16.    }
  17. }
  18.  

No pongo todo el código pues sería imposible, realizo todos los using necesarios en c# y el proyecto en sí funciona perfectamente en modo Debug. Ahora bien, al ponerlo en modo Release me surgen estos errores:



Error   1   error LNK2028: se hace referencia al símbolo (token) sin resolver (0A0000D3) "extern "C" int __stdcall MessageBoxW(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBoxW@@$$J216YGHPAUHWND__@@PB_W1I@Z) en la función "extern "C" int __cdecl MessageBox(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBox@@$$J0YAHPAUHWND__@@PB_W1I@Z)   C:\Users\Asus\Documents\Visual Studio 2010\Projects\Interfaz\Entrenar\Entrenar.obj   Entrenar
Error   2   error LNK2019: símbolo externo "extern "C" int __stdcall MessageBoxW(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBoxW@@$$J216YGHPAUHWND__@@PB_W1I@Z) sin resolver al que se hace referencia en la función "extern "C" int __cdecl MessageBox(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBox@@$$J0YAHPAUHWND__@@PB_W1I@Z)   C:\Users\Asus\Documents\Visual Studio 2010\Projects\Interfaz\Entrenar\Entrenar.obj   Entrenar
Error   3   error LNK1120: 2 externos sin resolver   C:\Users\Asus\Documents\Visual Studio 2010\Projects\Interfaz\Release\Entrenar.dll   Entrenar
Error   4   No se encuentra el ensamblado de referencia "C:\Users\Asus\Documents\Visual Studio 2010\Projects\Interfaz\Release\Entrenar.dll". Si este ensamblado lo genera otro de sus proyectos, asegúrese de compilar ese proyecto primero.   Interfaz

Tengo otras muchas funciones exportadas de la misma manera que funcionan perfectamente tanto en debug como en release el problema se centra en MessageBox ya que si comento el switch completo de Entrenar.cpp (es decir, no se llama nunca a messageBox) el código compila y se genera perfectamente en release, pero el problema es que me hace falta sí o sí. Siento mucho el rollo y agredecería cualquier ayuda o idea por pequeña que sea. Muchas gracias.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: messageBox error lnk2028
« Respuesta #1 en: Sábado 24 de Diciembre de 2011, 17:16 »
0
Te falla al enlazar, no encuentra MessageBoxW, y esa funcion esta en la libreria User32.dll, tenes que agregar la libreria de importacion User32.lib, proba agregando en el proyecto de C++:
Código: C++
  1. #pragma comment(lib, "User32.lib")

Tambien podes hacerlo en el proyecto (enlazador, librerias adicionales o algo asi).


Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

xouba

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: messageBox error lnk2028
« Respuesta #2 en: Domingo 25 de Diciembre de 2011, 04:36 »
0
Muchísimas gracias. Ahora funciona perfectamente.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: messageBox error lnk2028
« Respuesta #3 en: Domingo 25 de Diciembre de 2011, 14:08 »
0
De nadas  :guitar:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.