Probleme : error LNK2001: unresolved external symbol...

cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007 - 12 déc. 2003 à 19:21
cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007 - 12 déc. 2003 à 20:15
Tous d'abor bonjour, quand je compile mon programme (visual c++ 6.0), il m'affiche cette erreur, ece que quelqu'un pourrais l'aider ? :
Main.obj : error LNK2001: unresolved external symbol "long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z)
Release/Logiciel.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

voicis le contexte :

#include <windows.h>
#include <sys/timeb.h>
#include <math.h>
#include
#include
#include <stdio.h>

#pragma comment(lib, "Release/DLL.lib")
#include "DLL.h"
#include "resource.h"

//*********************Les classes***********************
CEncrypte pcEncrypte;

HINSTANCE hInst = NULL;
HWND hwnd = NULL;
WNDCLASS fenetre;
//*******************************************************

//************Prototype de fonction*****************************************
LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam);
LRESULT CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
//**************************************************************************

LRESULT CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_INITDIALOG:
//Reinitialisation (optionel)
memset(pcEncrypte.cEncrypte, 0, sizeof(pcEncrypte.cEncrypte));
break;

case WM_COMMAND:
{
/*
case VK_ESCAPE:
exit(1);
break;*/

switch(LOWORD(wParam))
{
case ID_EXIT:
//ShellExecute(hwnd,"open","www.DCA-Software.fr.st",0,0,SW_NORMAL);
exit(1);
break;

case ID_ENCRYPTE:
GetDlgItemText( hwnd, IDC_CONVERSION_W, pcEncrypte.cEncrypte, 2000); //On repeche les données
pcEncrypte.EncrypteTxt(); //On vas chercher le texte de la variable
break;

case IDC_OPTION:
//code for option here
break;
}
break;
}
default:
return FALSE;
}
return TRUE;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nCmdShow)
{
//définition des paramètre de la classe fenêtre
fenetre.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
fenetre.lpfnWndProc = WindowProc;
fenetre.cbClsExtra = 0;
fenetre.cbWndExtra = 0;
fenetre.hInstance = hInstance;
fenetre.hIcon = LoadIcon(hInst, NULL);//MAKEINTRESOURCE(IDI_APPICON)
fenetre.hCursor = LoadCursor(NULL, IDC_ARROW);
fenetre.hbrBackground = (struct HBRUSH__ *)GetStockObject(WHITE_BRUSH);
fenetre.lpszMenuName = NULL;
fenetre.lpszClassName = "Classe fenetre";

// enregistrer la classe fenêtre
if (!RegisterClass(&fenetre)) return(0);

hInst = hInstance;

DialogBox(hInst, MAKEINTRESOURCE(IDD_MAIN_FRAME), NULL, ( DLGPROC ) DlgProc); //Ouverture de la boite de dialogue

return (0);
}

J'ai une dll qui de trouve dans\Release ,et la librairi y est aussi.

J'espere que quelqu'un pourrai m'aider...

Mr.X (et la vie continue...)

2 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
12 déc. 2003 à 19:51
L'erreur du linker vient du fait que WndProc est déclaré mais pas défini.

Si tu ne créé pas de fenêtres avec CreateWindow, inutile de créer une classe de fenêtre (RegisterClass()).
Comme tu utilise simplement DialogBox, le traitement des messages se fait dans DlgProc.

supprime donc cette partie :

//définition des paramètre de la classe fenêtre
fenetre.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
fenetre.lpfnWndProc = WindowProc;
fenetre.cbClsExtra = 0;
fenetre.cbWndExtra = 0;
fenetre.hInstance = hInstance;
fenetre.hIcon = LoadIcon(hInst, NULL);//MAKEINTRESOURCE(IDI_APPICON)
fenetre.hCursor = LoadCursor(NULL, IDC_ARROW);
fenetre.hbrBackground = (struct HBRUSH__ *)GetStockObject(WHITE_BRUSH);
fenetre.lpszMenuName = NULL;
fenetre.lpszClassName = "Classe fenetre";

// enregistrer la classe fenêtre
if (!RegisterClass(&fenetre)) return(0);

Enfin, l'appel à exit est à proscrire dans une appli Win32. Pour fermer la boîte de dialog : EndDialog() qui aura pour conséquence de retourner une valeur à DialogBox et ensuite finir le WinMain.
0
cs_Mr.X Messages postés 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 2 novembre 2007
12 déc. 2003 à 20:15
Merci, je le savais ;) mais je n'ai pas tjr le coup d'oeil d'autant plus qu'un autre programme cree sur la meme base marcher.
Efin merci quand meme :)

Mr.X (et la vie continue...)
0
Rejoignez-nous