Not-Real Geschrieben 23. November 2001 Geschrieben 23. November 2001 Hallo leute,ich habe vor ein paar tagen mit windows programmieren unter c++(mfc) angefangen und bin auch prompt auf ein problem gestossen.Ich weis nicht wie ich es beseitigen soll,aber ich schreibe mal am besten den code mit der fehlermeldung hier runter.Vielleicht kann mir ja jemand sagen was das problem ist oder gar eine lösung erläutern.Ich würde mich auf alle fälle sehr freuen der Code: #include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("HelloWin") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { // UNICODE-Compilierung ist die einzige realistische Fehlermöglichkeit MessageBox (NULL, TEXT ("Programm arbeitet mit Unicode und setzt Windows NT voraus!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, // Name der Fensterklasse TEXT ("Das erste echte Programm"), // Fenstertitel WS_OVERLAPPEDWINDOW, // Fensterstil CW_USEDEFAULT, // X-Position des Fensters CW_USEDEFAULT, // Y-Position des Fensters CW_USEDEFAULT, // Fensterbreite CW_USEDEFAULT, // Fensterhöhe NULL, // übergeordnetes Fenster NULL, // Menü hInstance, // Programm-Kopiezähler (Programm-ID) NULL) ; // zusätzliche Parameter ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc ; PAINTSTRUCT ps ; RECT rect ; switch (message) { case WM_CREATE: PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ; return 0 ; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; } die fehlermeldung : --------------------Configuration: HelloWin - Win32 Debug-------------------- Linking... LINK : fatal error LNK1104: cannot open file "Debug/HelloWin.exe" Error executing link.exe. HelloWin.exe - 1 error(s), 0 warning(s) kann mir da mal jemand was dazu sagen?Ich weis das linking problemme ein bisschen komplex sind. Dankkkkkeeeee Zitieren
Wellenreiter Geschrieben 23. November 2001 Geschrieben 23. November 2001 hy, also diese fehlermeldung bezieht sich meins erachtens nicht auf deinen quelltext.ich glaube es geht hier vielmehr um einen fehler in der erstellung des programmes, soll heissen, dass du diese fehlermeldung bekommst, wenn du beispielsweise nachträglich variablennamen im klassen-assistenten veränderst oder steuerelementen verkehrte variablennamen zuweist. will niicht rumunken, aber ich denke du solltest nochmal von vorne anfangen. viel spass + gruesse Zitieren
Klotzkopp Geschrieben 24. November 2001 Geschrieben 24. November 2001 Diese Fehlermeldung entsteht meistens dadurch, dass Du versuchst, das Programm neu zu linken während es noch läuft. Zitieren
Not-Real Geschrieben 24. November 2001 Autor Geschrieben 24. November 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Klotzkopp: <STRONG>Diese Fehlermeldung entsteht meistens dadurch, dass Du versuchst, das Programm neu zu linken während es noch läuft.</STRONG> Zitieren
Klotzkopp Geschrieben 24. November 2001 Geschrieben 24. November 2001 Ich nehme alles zurück, wenn das Programm noch liefe, würde der Linker LNK1168 melden. Ich wundere mich allerdings, wie Du das Programm ohne #include "mmsystem.h" #pragma comment(linker, "/defaultlib:winmm.lib") überhaupt zum Compilieren gebracht hast. Ist das der ganze Quellcode? Zitieren
Not-Real Geschrieben 24. November 2001 Autor Geschrieben 24. November 2001 Hallo Klotzkopp, also das ist der complette code,und es lässt sich auch fehlerfrei compilieren,aber wenn ich es dan starten will zeigt es eben diese fehlermeldung die ich weiter oben aufgezeigt habe.Der code müsste anfürsich fehlerferi sein,darum ja auch mein grosses wundern über diese fehlermeldung.Gib doch mal einach so spasseshalber den code so wie er steht bei dir ein,und sag mir ob es bei dir geht.Mich würde echt mal interessieren woran das liegt Zitieren
Crush Geschrieben 24. November 2001 Geschrieben 24. November 2001 @Not-Real Linker-Dienstprogrammfehler LNK1104 Datei "Dateiname" kann nicht geöffnet werden Das Dienstprogramm konnte die angegebene Datei nicht öffnen. Tips Einer der folgenden Gründe kann die Ursache dafür sein: Es stand nicht genügend Festplattenspeicher zur Verfügung. Die Datei existiert nicht. Der Dateiname oder Pfad wurde falsch angegeben. Das angegebene Laufwerk ist ungültig. Die Datei hat nicht die benötigten Berechtigungen. Der Pfad zu Dateiname überschreitet die Länge von 260 Zeichen. Wird die vom Linker erzeugte temporäre Datei mit LNKn benannt, existiert möglicherweise das in der Umgebungsvariablen TMP angegebene Verzeichnis nicht, oder es sind mehrere Verzeichnisse in der Umgebungsvariablen TMP angegeben. (Es sollte nur ein Verzeichnispfad in der Umgebungsvariablen TMP spezifiziert werden.) Tritt der Fehler bei der ausführbaren Datei auf, könnte eine ältere Version der Datei noch ausgeführt werden. Sie sollten vor dem Kompilieren der Datei diese erst abbrechen. In Windows NT oder Windows 95 können Sie zum Suchen und Entfernen von Instanzen der Anwendung das Programm PVIEW verwenden. PVIEW.EXE wird mit Visual C++ ausgeliefert. Tritt die Fehlermeldung bei einem Bibliotheksnamen auf, und Sie portierten die .MAK-Datei vor kurzem von einem älteren Microsoft Visual C++-Entwicklungssystem, könnte die Bibliothek nicht mehr gültig sein. Stellen Sie sicher, daß die Bibliothek auch unter diesen Bedingungen noch existiert. RESOLUTION To work around this problem, copy the ActiveX executable or DLL to a separate directory. Set binary compatibility to the copied file, and compile to the original directory. This procedure is described in Microsoft Visual Basic Books Online. Also das war alles was ich dazu in der MSDN finden konnte. Das Letzte war glaub von VB aber Du benutzt ja kein ActiveX (oder hast Du doch damit das Ojekt builden lassen?) - viel Spaß beim Ausprobieren! <FONT COLOR="#a62a2a" SIZE="1">[ 24. November 2001 21:32: Beitrag 1 mal editiert, zuletzt von Crush ]</font> Zitieren
Not-Real Geschrieben 24. November 2001 Autor Geschrieben 24. November 2001 @Crush Hi,zunächst einmal danke schön für diese ausfürliche erläuterung des Linker-Dienstprogrammfehler LNK1104 Was ich nicht verstehe ist,ich lerne gerade windows programmieren vom Buch aus und da ist auch eine CD dabei.Genau dieses kleine billige Programm das eigentlich nur ein Fenster öffnet worin Windows 98 darinsteht ist ebenfalls auch auf der cd dabei und funktioniert auch so wie es sein müsste.Ich meine dieser Quellcode ist der gleiche wie im buch,und ich benutze auch Microsoft Visual C++ 6.0 wie der typ im Buch auch.Dieser Code ist einer der Übungen.Von daher kann ich es mir irgendwie nicht so recht erklären warum es bei mir nicht funzt,schliesslich soll man ja damit lernen.Ich glaube auch nicht das es an Festplattenspeicher liegt,davon habe ich genug Naja,ich fürchte ich werde den fehler nicht beheben können Aber trotzdem vielen dank für deine aussfürliche erläuterung des Fehlers Zitieren
Klotzkopp Geschrieben 25. November 2001 Geschrieben 25. November 2001 Wenn ich Deinen Code so eingebe, bekomme ich error LNK2001: Nichtaufgeloestes externes Symbol __imp__PlaySoundA@12, weil die winmm.lib fehlt. Was steht denn in Deinen Projekteinstellungen unter Linker/Projektoptionen? Zitieren
Crush Geschrieben 25. November 2001 Geschrieben 25. November 2001 OK, dann anders: 1.) Sind die IDs der Resourcen überhaupt definiert und vorhanden? Sind die Resourcen selbst überhaupt vorhanden? wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; Playsound() muß ja auch eine vorhandene Resource haben: Filename richtig geschrieben? Sound auch innerhalb der Path-Variable? 2.) Ich hoffe, daß auch dir Unicode-Bibliotheken installiert sind: MSDN: Hinweis Die Unicode-Versionen für die MFC-Bibliotheken werden nur auf Ihre Festplatte kopiert, wenn Sie dies während einer benutzerdefinierten Installation auswählen. Bei anderen Installationsarten werden sie nicht kopiert. Wenn Sie versuchen, eine Anwendung für MFC-Unicode ohne diese MFC-Unicode-Dateien zu erstellen oder auszuführen, können Fehler auftreten. Um die Dateien auf Ihre Festplatte zu kopieren, rufen Sie erneut Setup auf, wählen Sie Benutzerdefiniert im Dialogfeld Installationsoptionen, deaktivieren Sie alle anderen Komponenten mit Ausnahme von "Microsoft Foundation Class Libraries", klicken Sie auf die Schaltfläche Details, und wählen Sie "Static Library for Unicode" sowie "Shared Library for Unicode" aus. 3.) Versuche mal alle Optimierungen auszuschalten, es könnte auch sein, daß das Programm in ein Speichermodell (tiny,small z.B.) gezwungen wird, obwohl einige Zeiger far pointer (huge) sein müssen. Könnte auch was bringen. 4.) Sollte die Datei im Debug-Ordner drinstehen, versuche doch mal den Linker mit Gewalt danach suchen zu lassen, indem Du ihm den direkten Pfad dorthin angibst, dazu mußt Du aber eine Umgebungsvariable definieren: Das folgende Pragma veranlaßt den Linker, während des Bindens nach der Bibliothek EMAPI.LIB zu suchen. Der Linker sucht zunächst im aktuellen Arbeitsverzeichnis und dann im Pfad, der in der Umgebungsvariablen LIB angegeben ist. #pragma comment( lib, "emapi" ) 5.) Überhaupt schau mal nach, ob die VC++ Umgebungsvariablen richtig gesetzt werden. Irgendwo muß VCVARS32.BAT aufgerufen werden. 6.) Versuch mal ganz am Anfang noch vor dem "#include <windows.h>" den afx-header mit einzubinden( #include "stdafx.h" ), auch wenn Du gar kein AFX verwendest. Irgenwo in der Windows könnte das schon verwendet werden. Bei mir schreit der ohne dies sogar fatal error, obwohl ich nur ein DOS-Programm mit Studio generiert habe, weil die vorkompilierte Header-Datei die afx komischerweise unbedingt will. Vielleicht solltest Du in den Compiler-Optionen mal bestimmte Dateigenerierungen unterdrücken wie die Programmdatenbank oder ähnliches und dann "alles neu erstellen". Sonst fällt mir vererst nix mehr ein. <FONT COLOR="#a62a2a" SIZE="1">[ 25. November 2001 10:52: Beitrag 2 mal editiert, zuletzt von Crush ]</font> Zitieren
Not-Real Geschrieben 25. November 2001 Autor Geschrieben 25. November 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Klotzkopp: <STRONG>Wenn ich Deinen Code so eingebe, bekomme ich error LNK2001: Nichtaufgeloestes externes Symbol __imp__PlaySoundA@12, weil die winmm.lib fehlt. Was steht denn in Deinen Projekteinstellungen unter Linker/Projektoptionen?</STRONG> Zitieren
Not-Real Geschrieben 25. November 2001 Autor Geschrieben 25. November 2001 @Crush Ich danke dir wiedermals für deine aussfürliche beschreibung Ich werde es gleich mal versuchen,danke schööööön Zitieren
Klotzkopp Geschrieben 25. November 2001 Geschrieben 25. November 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Not-Real: <STRONG> Ich glaube das liegt daran das du ein nicht vorhandenes wave file abzuspielen verusuchts</STRONG> Nein, weil der Linker nicht das Vorhandensein von Audiodateien prüft. Der Linker mault, weil die winmm.lib nicht dazugelinkt wird, in der der Code für PlaySound steht. Was steht denn nun in Deinen Linker-Optionen? Zitieren
Not-Real Geschrieben 25. November 2001 Autor Geschrieben 25. November 2001 @Klotzkopp Hi,also ich abe gerade nachgeschaut,unter den link optionen steht : kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/HelloWin.pdb" /debug /machine:I386 /out:"Debug/HelloWin.exe" /pdbtype:sept ich kenne mich aber da nicht so gut aus ob da was fehlt oder nicht Zitieren
Crush Geschrieben 25. November 2001 Geschrieben 25. November 2001 Such mal nach der winmm.lib und mach dann einfach "Dateien hinzufügen" Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.