Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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 ;)

Geschrieben

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 :D

Geschrieben

<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>

Geschrieben

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?

Geschrieben

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 :(

Geschrieben

@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>

Geschrieben

@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 :)

Geschrieben

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?

Geschrieben

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>

Geschrieben

<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>

Geschrieben

<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?

Geschrieben

@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 :(

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...