Eine minimale Windows-Anwenung mit unerklährlichem Fehler ...
-
Hallo Coder,
habe da eine mir bislang unbekannten Fehler bei der Programmierung eines "Fensters." Der Fehlerauswurf: "undefined reference to 'TextOutA@20'
Ist das ein Adressierungsfehler?Meine derzeitige Arbeitskonfiguration:
Codeblocks 13.12 und Mingw Compiler, Win7-Pro und das Buch "C Lernen und prof anwenden. Beispiel aus Kapitel 21, S 400 bis 408. Leider habe ich von den Verfassern noch keine Antwort bekommen, was sehr bedauerlich ist. Schade Mitp Verlag!Am Ende soll sich ein Programmfenster öffnen mit einem minimalen Text.
Der Code:
////Basis.c --> Eine minimale Windows-Anwendung in C
#include <windows.h>//Globale variablen
HINSTANCE hInst = 0;
char szAppName[] = "Basis";
char szTitle[100] = "Hallo Windows";//Prototypen eigener Funktionen
BOOL InitApplikation();
BOOL InitInstance(int);
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );//Der Programm Einstiegspunkt
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int cCmdShow )
{
MSG msg;//Platz für eine neue Message
hInst = hInstance;//handle an eine neue Instanz zuweisenif(!InitApplication())
return (FALSE);if(!InitInstance(cCmdShow))
return (FALSE);while(GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg);
DispatchMessage( &msg);
}
return ( msg.wParam );
}BOOL InitApplication()////// jetzt die Fensterklasse registrieren
{
WNDCLASSEX wc; //Fensterklasse//Anzahl der bytes dieser Struktur
wc.cbSize = sizeof( WNDCLASSEX );
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = ( WNDPROC )WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground = ( HBRUSH )GetStockObject( WHITE_BRUSH );
wc.lpszMenuName = NULL;
wc.lpszClassName = szAppName;
wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );return RegisterClassEx(&wc);
}
//////////Hauptfenster erzeugen und anzeigen it InitInstance()
BOOL InitInstance( int nCmdshow )
{
HWND hWnd;
hWnd = CreateWindow( szAppName,
szTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInst,
NULL );if( !hWnd )
return( FALSE );ShowWindow( hWnd, nCmdshow );
UpdateWindow( hWnd );return( TRUE );
}
////Fenster Prozedur definieren. Die Funktion Wndproc()
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps;
HDC hdc;
char szText[] = "Mein erstes handgestricktes Windows-Programm";switch( message )
{
case WM_PAINT:
hdc = BeginPaint( hWnd, &ps );//Hier Ausgabe in der Client Area, zB. ein Text ...
TextOut( hdc, 100,100, szText, strlen( szText ) );EndPaint( hWnd, &ps );
break;case WM_DESTROY:
PostQuitMessage(0);
break;default:
return DefWindowProc( hWnd, message, wParam, lParam );
}
return 0;
}
-
Duessel schrieb:
Der Fehlerauswurf: "undefined reference to 'TextOutA@20'
Ist das ein Adressierungsfehler?Nein, das bedeutet, dass du Gdi32.lib nicht gelinkt hast.
Duessel schrieb:
Leider habe ich von den Verfassern noch keine Antwort bekommen, was sehr bedauerlich ist. Schade Mitp Verlag!
Ja, das ist echt bitter. Schade, dass es kein weltweites Computernetzwerk gibt, das man nach der Fehlermeldung durchsuchen könnte. Aber selbst wenn: Du bist sicherlich der erste, der dieses Problem hat.
-
Wie kann ich das bewerkstellen?
-
Duessel schrieb:
Wie kann ich das bewerkstellen?
Was? Eine Suchmaschine bedienen?
-
Duessel schrieb:
Wie kann ich das bewerkstellen?
OK. jetzt hab ich es. Super Tip mit der Verlinkung der Gdi32. DANKE!
Der Link hierzu:
http://stackoverflow.com/questions/5862757/how-do-i-link-to-a-library-with-codeblocksZusätzlich muss man in "Code::Blocks" den Code aus der "win32" Projektdatei
rauslöschen und den Code den ich programmiert hatte einfügen, um den Buch treu zu bleiben.Dann bleibt noch zu klären ob sich lieber auf FLTK oder SmartWin oder GTK stürzen?
Was wäre vor allem in der Hinsicht auf die Zukunft, besser?