Gå til innhold

undefined reference to `WinMain@16'


Anbefalte innlegg

Skrevet (endret)

Jeg har forsøkt å kompilere dette Windows-programmet en stund nå, men får stadig denne feilmeldingen:

 

C:\Dev-Cpp\lib/libmingw32.a(main.o)(.text+0x106):main.c: undefined reference to `WinMain@16'

collect2: ld returned 1 exit status

 

 

Er jeg nødt til å bruke spesielle innstillinger når jeg skal lage et program for windows?

 

Her er programmet:

 

EDIT: Det virket etter å ha byttet ut WinMain med main, men det kommer bare opp et DOS-vindu.

 

#include <windows.h>
LRESULT CALLBACK MainProc (HWND, UINT, WPARAM, LPARAM);


LPTSTR lpszClassName = "App";
WNDCLASS wc;
MSG msg;
HWND hwnd;
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, DWORD iCmdShow)
{

wc.lpszClassName = lpszClassName;
wc.lpfnWndProc = MainProc;
wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( NULL, IDC_ARROW );
wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+1 );
wc.lpszMenuName = NULL;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;

RegisterClass(&wc);

hwnd = CreateWindow
(lpszClassName,"Main Window",WS_OVERLAPPEDWINDOW,0,0,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);


while (GetMessage(&msg, NULL, 0, 0) > 0) 
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;

}

LRESULT CALLBACK MainProc (HWND hwnd1, UINT msg, WPARAM wParam, LPARAM lParam)
{
  switch(msg)
  {
      case WM_DESTROY:
          PostQuitMessage(0);
          return 0;
  }
  return DefWindowProc(hwnd, msg, wParam, lParam);
}

 

Jeg bruker GCC med Bloodshed C++ IDE

Endret av olemongo
Videoannonse
Annonse
Skrevet (endret)

Programmet finner ikke main funksjonen. Litt usikker, men det er mulig du må inkludere "stdafx.h" eller noe sånt. Lenge siden jeg har koda noe under windows. :)

 

Edit: feilen skjer mao. under linkina

Endret av staalezh
Skrevet (endret)
Programmet finner ikke main funksjonen. Litt usikker, men det er mulig du må inkludere "stdafx.h" eller noe sånt. Lenge siden jeg har koda noe under windows. :)

 

Edit: feilen skjer mao. under linkina

7898636[/snapback]

 

i vc så er "stdafx.h" default navnet på pre-kompilerte headeren og er ikke denne satt opp så har den ingen funksjon og man trenger den ikke for å få normal kode til å fungere (hvis man overhode trenger den)

 

 

Den eneste feilen jeg ser er at iCmdShow skal være int og ikke DWORD

Endret av Giddion
Skrevet

Ah, er det det som er dealen med "stdafx.h". :)

Så konklusjonen blir vel den at hvis trådstarter endrer parameteret fra DWORD til int, bør kompilatoren være i stand til å finne funksjonen. \o/

Skrevet (endret)

Jepp, det gjorde susen. Takk for svar.

 

Men, det kommer ikke noe Windows-vindu opp, bare et DOS-vindu. Fint om noen vet hvorfor.

Endret av olemongo
Skrevet
Jepp, det gjorde susen. Takk for svar.

 

Men, det kommer ikke noe Windows-vindu opp, bare et DOS-vindu. Fint om noen vet hvorfor.

7901414[/snapback]

 

Project -> Project Options -> sett "type" til Win32 GUI

Skrevet (endret)

Da kommer det ikke noe i det hele tatt.

Jeg har prøvd å kompilere det programmet som var med Dev++, og det virket helt fint, uten å måtte velge Win32 GUI.

 

EDIT: Fant ut det selv. Var noe tull med valg av ikon i utfylling av WNDCLASS wc.

Endret av Jorgur

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...