Borland Linker Error
-
Hi Jungz
Ich versuche gerade, ein 16-Bit DOS-Programm auf einem embedded 80186er Prozessor zum Laufen zu bringen. Dazu verwende ich den Borland C++ Builder 5.02 mitsamt Borland IDE.
Um ein Bitmap Bild zu zeichnen und dann auf der Festplatte des Systems abzulegen, habe ich das Ganze so begonnen:
#include <windows.h> void main(void) { BITMAPINFOHEADER bmInfoHeader; HBITMAP hbImage; HDC dcMain = CreateCompatibleDC(NULL); }
Wenn ich das mit jetz zu kompilieren versuche, gibt's beim Kompilieren selbst zwar keine Fehler, beim Linken mit TLINK jedoch erscheint folgende Meldung:
"Undefined symbol CREATECOMPATIBLEDC in module chart.cpp"
Aus dem Ganzen resultiert sogar eine EXE, aber beim Ausführen stürzt sie sogleich ab (mit irgendwelchem OP-Code als Fehlermeldung )
Woran kann das liegen?
Danke für eure Hilfe und Gruss
Kessi
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum Compiler-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wahrscheinlich entsprechende Headerdatei vergessen oder eventuell
Begriff falsch geschrieben( Buchstabendreher, Groß-/Kleinschreibung ).Lass einfach mal Windows-Suchen über die Headerdatei laufen und meist
hast du dann die Ursache.In deinem besonderen Fall, 80186 sind ja schon etwas älter, nicht vergessen
die entsprechenden Compiler-/Linkerschalter setzen.MfG f.-th.
-
Hm, das mit der Gross- und Kleinschreibung, etc. habe ich eigentlich schon durch, hatte den Fehler nämlich schon bei verschiedenen Header-Dateien und dann eigentlich auch mit allen darin enthaltenen Funktionen. Dass ich mich da ständig vertippt habe, ist also unwahrscheinlich.
Die entsprechenden Flags setzt die Borland IDE ja auch automatisch, also bin ich im Moment ziemlich ratlos
-
Beim 80186 must du der Automatic mit grösster Wahrscheinlichkeit nachhelfen.
Was sagt die Windows-Suche denn, wo ist "CreateCompatibleDC" ( ich habs nur
kopiert ) denn definiert.Hab mir deine Frage ein wenig genauer angesehen:
80186 und Windows - da haste dir aber was vorgenommen.
such mal im Netz, ich glaube Windows-Programme laufen halbwegs komplett
erst ab dem 386 und mit Einschränkungen auf einem 286.
Höchstens Win-Versionen vor 3.0 laufen meiner Info nach auf Rechner vor
dem 286.Ich kann mir kaum vorstellen, das der C-Builder CPU's vor der 286 unterstützt.
Wenn, dann nur mit extremen Klimmzügen. Für DOS eventuell ja, aber für
Windows unwahrscheinlich.viel Spaß noch f.-th.
es sei denn es ist ein 80386 und kein 80186.
-
bin noch nicht richtig wach:
du willst ein Programm für 16bit DOS erstellen das auf einem 80186 läuft.
windows.h kannst du vergessen wie schon im Posting zuvor beschrieben.Ich würde Borland Compiler aus der DOS-zeit z.B. Turbo C 2.0 (Borland Museum)
oder den Turbo C++ 3.0 (Vielleicht kommst du als Schüler/Student noch dran)
um dein Problem anzugehen. Und den Lösungsansatz für diese Compiler optimieren,
den bisherigen Code kriegste so auf einem 80186 nicht zum laufen.MfG f.-th.
-
f.-th. schrieb:
Ich würde Borland Compiler aus der DOS-zeit z.B. Turbo C 2.0 (Borland Museum)
oder den Turbo C++ 3.0 (Vielleicht kommst du als Schüler/Student noch dran)
um dein Problem anzugehen. Und den Lösungsansatz für diese Compiler optimieren,
den bisherigen Code kriegste so auf einem 80186 nicht zum laufen.Borland C++ 5.02 war die letzte Version die DOS Programme erzeugen konnte. Da braucht man nichts aus dem Borland Museum.
Aber die Verwendung von Windows-Funktionen ist dabei natürlich nicht möglich.
-
Hm, ok, dann wär das ja mal geklärt.
Wenn die windows.h entfällt, wie soll ich dann Grafikdateien erstellen? Ich will sie ja nicht auf dem Bildschirm ausgeben oder so, ich muss sie lediglich im Buffer haben um sie per CGI versenden zu können.
Gibt es da eine 16-Bit Bibliothek, mit der man Bilder erstellen und manipulieren (Linien zeichnen, etc.) kann?
Greeetz
Kessi
-
Warum sollte man die windows.h nicht mit einbinden können? Vielleicht fehlt einfach nur eine lib (Gdi32.lib).
-
Braunstein schrieb:
Warum sollte man die windows.h nicht mit einbinden können? Vielleicht fehlt einfach nur eine lib (Gdi32.lib).
Deswegen gibt es ja auch einen Linker Error.
Aber die *.lib Dateien des Compilers sind ja nur Importbibliotheken für die entsprechenden Windows DLLs. Und die kann man nicht einzeln nach DOS kopieren, um ihre Funktionen zu benutzen.
Vielleicht geht es ja damit
-
Gdi32.lib und Verwante funktionieren erst ab dem 80386 ( =386 ) und
nicht mit dem 8086, 8088 oder 80186!
Es gab seinerzeit entsprechende 16bit Bibliotheken, aber wenn es nur
um Punkte, Linien, Kreise oder Elipsen geht, die Funktionen kannste doch
selbst erstellen.Ältere Compiler von MS, Borland, Symantec ( = Zortech oder Digital Mars )
oder wahrscheinlich auch Watcom hatten entsprechende Bibliotheken an Bord,
die leider untereinander inkompatibel waren. Im Zuge der Umstellung auf
32bit sind die meisten dieser Bibliotheken bei neueren Versionen entfernt
worden weil sie nicht optimal zu den 32bit Windowsversionen passen.Schau bei den alten Compilern unter graph.h ( für die Schreibweise über-
nehme ich keine Gewähr - ist schon ein paar Tage her ) eventuell auch nach
grafik.h oder grafiks.h oder c statt k oder bei Symantec glaube ich mich
erinnern zu können noch anders ( disp.h ? ). Borland ( graphics.h ? ).
Mit Watcom hab ich damals nicht programmiert.MfG f.-th.