Jueves 14 de Noviembre de 2024, 16:55
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
messageBox error lnk2028
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: messageBox error lnk2028 (Leído 3320 veces)
xouba
Nuevo Miembro
Mensajes: 8
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++
#pragma once
using
namespace
System
;
extern
"C"
{
__declspec
(
dllexport
)
int
__cdecl Error
(
char
*
Mensaje,
char
*
Titulo,
int
tipo
)
;
}
class
__declspec
(
dllexport
)
Func_Exportadas
{
public
:
static
int
Error
(
char
*
Mensaje,
char
*
Titulo,
int
tipo
)
;
}
;
Entrenar.cpp
Código: C++
#include "Stdafx.h"
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#include "Entrenar.h"
int
Error
(
char
*
Mensaje,
char
*
Titulo,
int
tipo
)
{
return
Func_Exportadas
::
Error
(
Mensaje,Titulo,tipo
)
;
}
;
int
Func_Exportadas
::
Error
(
char
*
Mensaje,
char
*
Titulo,
int
tipo
)
{
LPCTSTR Mensaje_Cast
;
Mensaje_Cast
=
(
LPCTSTR
)
Mensaje
;
LPCTSTR Titulo_Cast
;
Titulo_Cast
=
(
LPCTSTR
)
Titulo
;
switch
(
tipo
)
{
case
1
:
MessageBox
(
NULL
,Mensaje_Cast,Titulo_Cast,MB_ICONSTOP
|
MB_TASKMODAL
)
;
return
(
FALSE
)
;
case
2
:
MessageBox
(
NULL
,Mensaje_Cast,Titulo_Cast,MB_ICONINFORMATION
|
MB_TASKMODAL
)
;
return
(
FALSE
)
;
case
3
:
MessageBox
(
NULL
,Mensaje_Cast,Titulo_Cast,MB_ICONSTOP
|
MB_TASKMODAL
)
;
return
(
FALSE
)
;
case
4
:
MessageBox
(
NULL
,Mensaje_Cast,Titulo_Cast,MB_ICONEXCLAMATION
|
MB_TASKMODAL
)
;
return
(
FALSE
)
;
}
return
(
TRUE
)
;
}
interfaz.cs
Código: C#
namespace
Interfaz
{
public
partial
class
Fm_Principal
:
Form
{
public
Fm_Principal
(
)
{
InitializeComponent
(
)
;
}
[
DllImport
(
"Entrenar.dll"
)
]
public
static
extern
int
Error
(
string
Mensaje,
string
Titulo,
int
tipo
)
;
Error
(
"Hola"
,
"prueba"
,
2
)
;
}
}
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.
Tweet
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
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++
#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
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:
Re: messageBox error lnk2028
«
Respuesta #3 en:
Domingo 25 de Diciembre de 2011, 14:08 »
0
De nadas
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.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
messageBox error lnk2028