Unresolved external 'WinMain' in C0W32.OBJ (war: Fehlermeldung)



  • Hallo,

    habe hier eine Fehlermeldung, bei der ich nicht weiss, was sie bedeutet.

    [Linker Fehler] Unresolved external 'WinMain' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\LIB\C0W32.OBJ

    Hoffe mir kann jemand sagen, was das sein könnte?

    Danke schonmal.

    Gruß
    MWJK

    Edit:
    Bitte aussagekräftige Überschriften wählen. Danke!



  • Die Meldung besagt, daß die Funktion WinMain, die vom Modul c0w32.obj, das den Startup-Code enthält, verlangt wird, nicht gefunden werden kann. Mögliche Fehlerquelle ist, daß du eine Konsolenanwendung geschrieben hast und als Hauptfunktion main() verwendest, sie aber als Win32-Anwendung zu linken versuchst. Du kannst das in den Linker-Einstellungen gewöhnlich verändern.



  • Lösch mal alle .obj, .tds, ... Dateien...
    (lass aber nach möglichkeit die .cpp, .h, .bpr und .res drin...)

    Dann mal das ganze Projekt neu Kompilieren...



  • Hallo,

    GCoder schrieb:

    Lösch mal alle .obj, .tds, ... Dateien...
    (lass aber nach möglichkeit die .cpp, .h, .bpr und .res drin...)

    Dann mal das ganze Projekt neu Kompilieren...

    Das hat leider nichts gebracht.

    audacia schrieb:

    Die Meldung besagt, daß die Funktion WinMain, die vom Modul c0w32.obj, das den Startup-Code enthält, verlangt wird, nicht gefunden werden kann. Mögliche Fehlerquelle ist, daß du eine Konsolenanwendung geschrieben hast und als Hauptfunktion main() verwendest, sie aber als Win32-Anwendung zu linken versuchst. Du kannst das in den Linker-Einstellungen gewöhnlich verändern.

    weisst du zufällig, was das für eine einstellung ist?

    Danke schonmal.

    Gruß
    MWJK



  • MWJK schrieb:

    weisst du zufällig, was das für eine einstellung ist?

    Kompilierst du von der Kommandozeile aus? Dann übergibst du an bcc32 einfach die Option -tWC, dann erstellt er eine Konsolenanwendung. Wenn du C++Builder oder BDS verwendest, dürfte es am einfachsten sein, ein neues Projekt anzulegen und dort die korrekten Einstellungen zu verwenden.



  • Ich verwende den Borland C-Builder.

    allerdings habe ich das Projekt (sitze nun schon seit fast drei stunden dran) schon öfter neu programmiert, leider ohne erfolg.

    Gruß
    MWJK



  • Neu programmieren mußt du es ja gar nicht 😉 Es reicht, wenn du über Datei|Neu|Weitere... den Konsolenexperten auswählst, in dessen Dialogfenster ein Häkchen bei "Konsolenanwendung" setzt (und ggf. bei "VCL/CLX verwenden" entfernst) und in dieses neue Projekt die Dateien des alten importierst.



  • hmm,

    nun bekomme ich folgenden fehler:

    [Linker Fehler] Unresolved external '_main' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\LIB\C0X32.OBJ

    ist zwar etwas anders, aber ich weiss trotzdem nicht was ich falsch mach ...

    Gruß
    MWJK



  • Ist in deinem Programm überhaupt eine main()-Funktion vorhanden?



  • nicht dass ich wüsste 😉
    habe die Tastendruck-auslesen aus der FAQ genommen. Wollte etwas ähnliches programmieren, aber schon dabei gibt es diesen fehler (obwohl der betroffene der dort fragte schrieb es funktioniert alles einwandfrei). ich hatte dann gar nicht weiterprogrammiert was ich noch hinzufügen wollte, weil ja da schon der fehler kam.

    Gruß
    MWJK



  • MWJK schrieb:

    nicht dass ich wüsste 😉

    Du hast da echt keine main-Funktion drin? Dann fehlts aber an Grundlagen...
    Lies lieber erst mal ein Tutorial, bevor du mit komplizierteren Sachen anfängst 😉



  • Benötige kein Tutorial mehr 😉
    Programmiere seit 5 Jahren Hobby mässig und seit 1 einhalb Jahren Berufsmässig.
    Befinde mich halt zur Zeit in der Ausbildung, habe aber schon schwierigere Sachen gemeistert.

    Wie gesagt habe ich hier aus den FAQ zum Thema Hooks die Anleitung genommen und genau das auch so programmiert, wie es dort drinnen stand.

    Gruß
    MWJK



  • MWJK schrieb:

    Benötige kein Tutorial mehr 😉

    Dann solltest du eigentlich wissen, daß jedes C- und C++-Programm eine main()-Funktion (für Windows-GUI-Programme heißt sie WinMain) benötigt. Woher sollte der Compiler denn sonst wissen, wo der Einsprungpunkt hin muß bzw. der Programmablauf beginnt?



  • audacia schrieb:

    MWJK schrieb:

    Benötige kein Tutorial mehr 😉

    Dann solltest du eigentlich wissen, daß jedes C- und C++-Programm eine main()-Funktion (für Windows-GUI-Programme heißt sie WinMain) benötigt. Woher sollte der Compiler denn sonst wissen, wo der Einsprungpunkt hin muß bzw. der Programmablauf beginnt?

    Das Programm ist ein ganz normales Programm mit funktionen und allem. Wie gesagt ist der Quelltext an sich nicht von mir. ich versuche nur diesen funktionstüchtig um zu setzen, weil er nicht geht. Das Programm fängt natürlich wie jedes andere auch oben im Programmtext an, baut sich auf und arbeitet das durch, was da ist.

    Gruß
    MWJK



  • MWJK schrieb:

    Das Programm fängt natürlich wie jedes andere auch oben im Programmtext an, baut sich auf und arbeitet das durch, was da ist.

    Nein 🙄
    Mit welcher Sprache arbeitest du beruflich?

    Und warum glaubst du mir nicht einfach und liest dir ein Tutorial durch?



  • Ich arbeite beruflich mit C++ und Java.

    Ich lese mir kein Tutorial mehr durch, weil ich C++ gelernt habe - wobei man natürlich in so einer Ausbildung nicht alles lernt, sondern später immernoch mal Sachen findet, die man noch nicht kennt.

    Wie gesagt weiss ich nur nicht, was das für ein Fehler ist.

    Gruß
    MWJK



  • Wenn du aber C++ kennst, wieso wunderst du dich dann, daß ein Programm, welches keine main()- bzw. WinMain()-Funktion enthält, nicht gelinkt werden kann?
    Und zur Lösung des Problems: einfach eine main()-Funktion hinzufügen und darin die Funktionen aufrufen, die du testen willst.



  • Also, bei TForm1::OnCreate wird eine Funktion aufgerufen die in einer DLL programmiert ist.
    bei TForm1::OnDestroy wird eine andere Funktion aufgerufen, die ebenfalls in dieser DLL programmiert ist. Die eine aktiviert und die andere deaktiviert etwas, das sich Hook nennt.
    Die Funktionen sind angelegt, nur ob sie funktionieren weiss ich nicht, da ich ja diese Fehlermeldung bekomme.

    Ich habe ehrlich gesagt zwar keine Ahnung von _main()- oder WinMain()-Funktionen (bzw. ich weiss nicht wirklich was es sein soll), aber programmieren an sich kann ich eine menge.

    Ich schätze jetzt einfach mal, dass eine _main()-Funktion ein (Bsp.:) OnButtonClick ist, liege ich da richtig?

    Wenn ja hat das Programm also _main()- oder WinMain()-Funktionen.

    Gruß
    MWJK



  • MWJK schrieb:

    Ich habe ehrlich gesagt zwar keine Ahnung von _main()- oder WinMain()-Funktionen (bzw. ich weiss nicht wirklich was es sein soll)

    Dann glaub mir einfach und lies ein Tutorial durch. Für C und C++ ist das Basiswissen, und solches ist am ehesten in Tutorials zu finden. Auch wenn du meinst, schon darüber hinaus zu sein, tu es einfach 😉

    MWJK schrieb:

    Ich schätze jetzt einfach mal, dass eine _main()-Funktion ein (Bsp.:) OnButtonClick ist, liege ich da richtig?

    Nein. TButton::OnClick ist ein Ereignishandler (technisch gesehen ein an ein konkretes Objekt gebundener Methodenzeiger - Borland nennt das "Closure"); die Funktion, auf die dieser Ereignishandler verweist, wird aufgerufen, sobald das Ereignis eintritt (in diesem Fall: Klick auf den Button). Die main()-Funktion (der Unterstrich davor wird vom Compiler automatisch hinzugefügt und braucht dich nicht zu stören, du definierst die Funktion trotzdem als main()) wird aufgerufen, wenn das Programm gestartet wird. Auch jedes normale C++Builder-Projekt hat eine solche Funktion, sie ist für gewöhnlich in der .cpp-Datei untergebracht, die den gleichen Namen trägt wie das Projekt. Schau doch nach, wenn du mir das nicht glaubst 😉



  • Okay, hast mich überredet.

    Habe also mal angefangen in einem Tutorial zu lesen und nach deinem letzten Posting nochmal mein Programm durchforstet und nun hat es eine WinMain-Funktion.

    Allerdings bekomme ich jetzt zwei neue Fehler ... so langsam dreh ich durch ...
    Wie kann ich denn eine *.obj-Datei verändern, ohne sie zu beschädigen?

    Danke schonmal.

    Gruß
    MWJK


Anmelden zum Antworten