003
23.02.2009, 08:11 Uhr
~Rucola
Gast
|
Hallo
C++: |
// Nicht aufgelöste Referenzen zwischen cpp und C-Files. Siehe Fehlermeldung am Schluss.
// Im Beispiel wird die Variable LowerPosition referenziert // case WM_DESTROY: // LowerPosition = 100; // Test Referenzen extern unsigned long
// Files Referenz2.cpp, Referenz.c in einer einfachen Windows "Hello World!" Anwendung ohne MFC
//Das C-File wird ohne "Precompiled Header Files" compiliert. Sonst entsteht eine Fehlermeldung, dass kein Fileende gefunden würde.
// ************************************************************
// Referenz2.cpp : Definiert den Einsprungpunkt für die Anwendung. //
#include "stdafx.h" #include "resource.h"
#define MAX_LOADSTRING 100
// Globale Variablen: HINSTANCE hInst; // aktuelle Instanz TCHAR szTitle[MAX_LOADSTRING]; // Text der Titelzeile TCHAR szWindowClass[MAX_LOADSTRING]; // Text der Titelzeile
// Vorausdeklarationen von Funktionen, die in diesem Code-Modul enthalten sind: ATOM MyRegisterClass( HINSTANCE hInstance ); BOOL InitInstance( HINSTANCE, int ); LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); LRESULT CALLBACK About( HWND, UINT, WPARAM, LPARAM );
// externe Referenzen extern unsigned long LowerPosition; /* Lower Position */
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // ZU ERLEDIGEN: Fügen Sie hier den Code ein. MSG msg; HACCEL hAccelTable;
// Globale Zeichenfolgen initialisieren LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_REFERENZ2, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance);
// Initialisierung der Anwendung durchführen: if( !InitInstance( hInstance, nCmdShow ) ) { return FALSE; }
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_REFERENZ2);
// Hauptnachrichtenschleife: while( GetMessage(&msg, NULL, 0, 0) ) { if( !TranslateAccelerator (msg.hwnd, hAccelTable, &msg) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } }
return msg.wParam; }
// // FUNKTION: MyRegisterClass() // // AUFGABE: Registriert die Fensterklasse. // // KOMMENTARE: // // Diese Funktion und ihre Verwendung sind nur notwendig, wenn dieser Code // mit Win32-Systemen vor der 'RegisterClassEx'-Funktion kompatibel sein soll, // die zu Windows 95 hinzugefügt wurde. Es ist wichtig diese Funktion aufzurufen, // damit der Anwendung kleine Symbole mit den richtigen Proportionen zugewiesen // werden. // ATOM MyRegisterClass( HINSTANCE hInstance ) { WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_REFERENZ2); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = (LPCSTR)IDC_REFERENZ2; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
return RegisterClassEx(&wcex); }
// // FUNKTION: InitInstance(HANDLE, int) // // AUFGABE: Speichert die Instanzzugriffsnummer und erstellt das Hauptfenster // // KOMMENTARE: // // In dieser Funktion wird die Instanzzugriffsnummer in einer globalen Variable // gespeichert und das Hauptprogrammfenster erstellt und angezeigt. // BOOL InitInstance( HINSTANCE hInstance, int nCmdShow ) { HWND hWnd;
hInst = hInstance; // Instanzzugriffsnummer in unserer globalen Variable speichern
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if( !hWnd ) { return FALSE; }
ShowWindow( hWnd, nCmdShow ); UpdateWindow( hWnd );
return TRUE; }
// // FUNKTION: WndProc(HWND, unsigned, WORD, LONG) // // AUFGABE: Verarbeitet Nachrichten für das Hauptfenster. // // WM_COMMAND - Anwendungsmenü verarbeiten // WM_PAINT - Hauptfenster darstellen // WM_DESTROY - Beendigungsnachricht ausgeben und zurückkehren // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; TCHAR szHello[MAX_LOADSTRING]; LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
switch( message ) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Menüauswahlen analysieren: switch( wmId ) { case IDM_ABOUT: DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break; case IDM_EXIT: DestroyWindow( hWnd ); break; default: return DefWindowProc( hWnd, message, wParam, lParam ); } break; case WM_PAINT: hdc = BeginPaint (hWnd, &ps); // ZU ERLEDIGEN: Hier beliebigen Code zum Zeichnen hinzufügen... RECT rt; GetClientRect( hWnd, &rt ); DrawText( hdc, szHello, strlen(szHello), &rt, DT_CENTER ); EndPaint( hWnd, &ps ); break; case WM_DESTROY: LowerPosition = 100; // Test Referenzen extern unsigned long PostQuitMessage( 0 ); break; default: return DefWindowProc( hWnd, message, wParam, lParam ); } return 0; }
// Nachrichtenbehandlungsroutine für "Info"-Feld. LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ) { case WM_INITDIALOG: return TRUE;
case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return TRUE; } break; } return FALSE; }
/****************************************************************************** * * ************************************************************************* * * * * * Hauptprogramm * * * * * ************************************************************************* * * Filename........... test1.c (spaeter main) * Modulname.......... Main * Uebersetzungsprogr. TMS-370 C-Compiler * Abstammung......... Original * Version............ % * Bearbeiter......... Peter Federer * Datum.............. Apr-20-98 Fed Kommentar ueberarbeitet * * Freig: .......... Freig. Datum: ........... *------------------------------------------------------------------------------ * * * ****** ************************************************************ * * * * Copyright (C) by * * * **** * Ingenieurbuero FEDERER * * * * * Maennedorf Switzerland * * * * ************************************************************ * *------------------------------------------------------------------------------ * Modulbeschreibung: * Es handelt sich um das Hauptprogramm. * * Moegliche Codeersparnis * ----------------------- * - Tabellen in ICT kuerzen (keine Reserve) * - Fourier zusammenfassen * * Debug-Stand * ----------- * - Eine ICT-Routine maskiert * - Kalibrierung eingeschaltet * - Feste Parameter fuer Hubmessung = off * * Letzte Ueberpruefungen * ---------------------- * - Warum ist Pin 5 floatend ? * - PWM Start ! * - Strom nachpruefen (Sigi) => Kurzgeschlossene Outputs (Masse) * *------------------------------------------------------------------------------ * Aenderungen: * Version Grund * ******************************************************************************/
// Variablen zur Anzeige der EEPROM-Parameter unsigned long LowerPosition; /* Lower Position */ unsigned long UpperPosition; /* Upper Position */ short Gain; /* Gain ursprüngliche Definition: BYTE */ unsigned long LowerSetpointU; /* Lower Setpoint (voltage) */ unsigned long UpperSetpointU; /* Upper Setpoint (voltage) */ unsigned long LowerSetpointI; /* Lower Setpoint (current) */ unsigned long UpperSetpointI; /* Upper Setpoint (current) */ unsigned long Checksum; /* Check-Summe EEPROM */
void Referenzen(void) { LowerPosition = 100; UpperPosition = 100; }
|
Code: |
Linker-Vorgang läuft... Referenz2.obj : error LNK2001: Nichtaufgeloestes externes Symbol "unsigned long LowerPosition" (?LowerPosition@@3KA) Debug/Referenz2.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise Fehler beim Ausführen von link.exe.
Referenz2.exe - 2 Fehler, 0 Warnung(en)
|
Dieser Post wurde am 24.02.2009 um 10:09 Uhr von FloSoft editiert. |