J'ai téléchargé la source d'une des personnes ici, je compile, tout va bien, je construit le .exe et il me met :
"Linking...
Cpp1.obj : error LNK2001: unresolved external symbol "long __stdcall WinProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WinProc@@YGJPAUHWND__@@IIJ@Z)
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/Cpp1.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
Cpp1.exe - 3 error(s), 0 warning(s)"
(Je suis sur microsoft visual C++)
Voici le code source, dites moi s'il y a un problème :
/*************************************************/
#include <windows.h>
// ID du EditBox
#define ID_EDITBOX 100
// ID du Button
#define ID_BUTTON 101
// Nom de la classe
char MainClassName[] = "GetWindowText";
// Instance du programme
HINSTANCE MainInstance;
// Handle de la fenêtre
HWND MainHandle;
// Handle du EditBox
HWND EditHandle;
// Handle du Button
HWND ButtonHandle;
// Prototype
LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);
/*************************************************/
// Entré du programme
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PrevInstance, LPSTR CmdLine, int CmdShow)
{
// Pour recevoir et transmettre les messages
MSG msg;
// Pour créé la fenêtre
WNDCLASSEX wc;
// Sauvegarde l'instance
MainInstance = hInstance;
// Création de la classe
wc.hInstance = MainInstance; // Instance du programme
wc.lpszClassName = MainClassName; // Nom de la classe
wc.lpfnWndProc = WinProc; // Procédure qui va recevoir les messages
wc.style = CS_DBLCLKS; // Le style...
wc.cbSize = sizeof(WNDCLASSEX); // Taille de la struct
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // L'icône(grande)
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // L'icône(petite)
wc.hCursor = LoadCursor(NULL, IDC_ARROW); // Le curseur
wc.lpszMenuName = NULL; // Menu
wc.cbClsExtra = 0; // ...
wc.cbWndExtra = 0; // ...
wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); // BackColor(Couleur de fond)
// Enregistre la classe
if (!RegisterClassEx(&wc))
return 0;
// Crée la fenêtre
MainHandle = CreateWindowEx(0, MainClassName, "GetWindowText (Sample)", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL,hInstance, NULL);
if (MainHandle == NULL)
return 0;
// Cré le EditBox
EditHandle = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, "EDIT", "", WS_CHILD|
WS_VISIBLE|ES_MULTILINE|WS_HSCROLL|WS_VSCROLL|ES_AUTOHSCROLL|ES_AUTOVSCROLL|
ES_WANTRETURN, 0, 0, 535, 300, MainHandle, (HMENU)ID_EDITBOX, hInstance, NULL);
if (EditHandle == NULL)
return 0;
// Cré le Button
ButtonHandle = CreateWindowEx(0, "BUTTON", "&Afficher le texte", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
5, 305, 140, 40, MainHandle, (HMENU)ID_BUTTON, hInstance, NULL);
if (ButtonHandle == NULL)
return 0;
// Envoie du texte dans le EditBox
SetWindowText(EditHandle, "Appuyer su le bouton [Afficher le texte] pour faire afficher\r\nce texte dans un MessageBox();");
// Affiche la fenêtre
ShowWindow(MainHandle, SW_SHOW);
// Met à jour la fenêtre
UpdateWindow(MainHandle);
// Recoie et transmet les messages
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// Fin du programme
return msg.wParam;
}
/*************************************************/
// Réception des messages
LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
// Ferme le programme
case WM_DESTROY:
PostQuitMessage(0);
break;
// Reception des commandes
case WM_COMMAND:
// Vérifie si on à cliquer sur le bouton
if ((LOWORD(wParam) == ID_BUTTON) && (HIWORD(wParam) == BN_CLICKED))
{
// Va contenir le texte du EditBox
char *LeText = NULL;
// Va contenir le nombres de caractères dans le EditBox
unsigned int TextLen = 0;
// Récupère le nombres de caractères dans le EditBox
TextLen = GetWindowTextLength(EditHandle);
// S'il n'est pas vide
if (TextLen)
{
// Alloue de la mémoire pour stocker le texte
LeText = new char[(TextLen + 2)];
// Récupère le texte
TextLen = GetWindowText(EditHandle, LeText, (TextLen + 1));
// Si aucune erreur et le EditBox contient bien quelque chose
if (TextLen)
{
// Affiche le texte
MessageBox(MainHandle, LeText, "Voila le texte", MB_OK);
}
else
{
// Erreur lors de la récupération du texte
MessageBox(MainHandle, "Erreur lors de la récupération du texte", "Erreur", MB_OK);
}
// Libère la mémoire
delete [] LeText;
}
else
{
// Le EditBox est vide
MessageBox(MainHandle, "Le EditBox est vide!", "Edit Vide", MB_OK);
}
}
default: // Par default...
return DefWindowProc(hwnd, msg, wParam, lParam);
break;
}
return 0;
}
/*************************************************/
L'auteur de ce code est : NitRic_
SVP, pourquoi cela ne veut pas se compiler ?
Merci.