Fehlermeldung "Nicht unterstützte 16 Bit-Anwendung



  • Hallo, bei meinem Demoprogramm in C (welches ich fertig erhalten habe)
    meckert Code::Blocks 13.12 das ich ein 64 Bit Computer System habe,
    Jetzt die Frage, kann man ein so altes C Programm für moderne
    Rechner 64 Bit umprogrammieren. Wenn ja wie hoch ist der Aufwand?
    Schon mal vielen Dank für die Hilfe. jueppes



  • Denkst du jemand kann dir mit den gegebenen Informationen eine hilfreiche Antwort geben?

    Zeig doch mal den Code (oder zumindest den Teil des Codes, der Probleme bereitet).



  • Hallo icarus2, erst mal sorry, (für meine Unwissenheit)
    bin ganz neu hier, von den Lebensjahren gesehen aber schon alt.
    Habe ein wenig Erfahrung in HTML, PHP, VB und auch C.
    Ich könnte Dir die ganze Programm Datei senden mit Source, Lib
    und Header Dateien. Aber wie? Ich werde Euch Profis bestimmt
    blöd vorkommen, aber eigentlich bin ich ganz o.k. Irgendwie
    war doch jeder mal ein Anfänger und brauchte Hilfe, LG jueppes



  • Hallo,

    du könntest die Fehlermeldung 1:1 hier reinkopieren und ggf. den Quellcode an der Stelle, auf die die Fehlermeldung verweist, ebenfalls.

    PS: Vergiss die Codetags nicht:

    /* ... */
    


  • Pastebin.com ist ganz gut zum quelltext zeigen



  • Hallo Bashar und alle anderen, kann bzw. darf man bei
    diesem Forum über Mail Adressen kommunizieren?
    Dann würde ich die ganze Datei versenden und wer kann
    und mag schaut sich das Dilemma einfach mal komplett an.
    Schon mal vielen Dank. LG jueppes



  • Normalerweise unterstützt C Plattformunabhängigkeit. Dafür wurde die Sprache ja u.a. entwickelt.
    Spannend ist jetzt der Teil, der nicht übertragbar ist.

    Das kann Betriebssystemcode sein, welcher auf den Prozessor zugeschnitten ist, oder bestimmte andere Prozessorbefehle, Anleihen von Bios-System oder auch Formatangaben, (die im Hexeditor angezeigt werden (beim fertigen Programm), oder eben (z.B.) der Import von bestimmten 16-Bit Programmen (Interrupts, Steuerbefehle exotischer Plattformen z.B.).

    Für solche Fälle gibt es aber einschlägige Werkzeuge und Crosscompiler.
    Es gibt auch zahlreiche Anleitungen im Internet, wie bei bestimmten Plattformen crosscompiliert wird.

    Eine andere Strategie ist Emulatoren einzusetzen bzw. Kompatibilitätsmodi.

    (Eine recht einfache Problemlösung (bei Pentiums) könnte sein, das Programm zuerst auf einem 32bit-System anzuschauen und zu bearbeiten.)
    (bzw. mit dem Compiler nach 32bit übertragen)

    Auf https://www.mikrocontroller.net werden solche Probleme öfters angesprochen, und dort gibt es auch die Möglichkeit, Dateien hochzuladen/anzuhängen.

    Ich würde aber nicht empfehlen, das komplette Programm hineinzustellen. Es reicht völlig, den problematischen Teil zu skizzieren/ Plattform/Betriebssystemangaben ausreichend zu beschreiben.



  • Hallo Nachtfeuer und alle anderen Leser,
    erst mal Danke für die ausführliche Antwort.
    Ich werde versuchen mich da morgen mal ordentlich einzulesen.
    Aber jetzt die Frage, wäre jemand bereit mich bei der Umsetzung
    (auch gegen Unkosten Erstattung oder Aufwandsentschädigung)
    zu unterstützen? Für einen Profi ist es vielleicht nur eine
    Kleinigkeit das Programm ans laufen zu bekommen.
    Ich werde mich da noch mal richtig reinhängen.
    Bis Morgen, schönen Abend noch. jueppes



  • suche Hilfe bei einem (kleinen) C++ Projekt, NRW/Duisburg

    nicht an mehreren Stellen im Forum um Hilfe fragen

    kannst du deinen Quelltext einfach bei pastebin.com reinstellen und die pastebin-Link hier posten?



  • also:

    0. Was macht das Programm?
    1. Quelltext bei pastebin.com rein
    2. was ist das Original-Entwicklungs-System, DOS und Turbo-C?
    3. Es ist also eine 16-Bit Anwendung?
    4. Gibt es Hardwarezugriff? RS232, BIOS/Interrupts usw.?
    5. Wieviel Zeilen Code sind es denn? 100, 100, 1Mio?



  • Guten Morgen, so habe den Quelltext bei pastebin reingestellt.
    Sollte man unter DDCMP.C finden. (Was ist mit der Header Datei?)
    Es sind 1410 Zeilen. Das Programm sollte so genannten EVADTS Daten
    aus einem Automaten auslesen und über die RS232 in eine Datei ausgeben.
    Die Daten werden vom Programm geparst und sichtbar gemacht.
    Habe hoffentlich alle Fragen beantwortet. Sonst einfach nochmal
    nachfragen. Schon mal vielen Dank für die Hilfe, jueppes



  • sorry ganz vergessen hier der pastebin Link.

    https://pastebin.com/TLZqDKFw

    schönen Sonntag, jueppes



  • Das ist kein compilierbarer Stand und obendrein schlimmes Gehacke.
    Die Header fehlen, evtl. fehlen auch noch Libs?
    Wenn die Lizenzbedingungen es hergeben, lade es in Github hoch und hoffe, dass sich dann jemand des Problems annimmt.



  • Hallo Wutz, erst mal Danke für deine Hilfe.
    Ja 20 Jahre altes Programm, was kann ich zur
    Unterstützung der Umsetzung beitragen? MFG jueppes



  • Welche externen Libs sind denn noch dabei (anscheinend über die Headerdatei "asynch_1.h" eingebunden)?
    Und hast du auch noch die Sourcen davon?

    Ich gehe davon aus, daß die Libs (DLLs) selbst als 16-Bit kompiliert sind und daher daraus dann keine 32- oder 64-bit Anwendung erstellt werden kann.

    Und welche Windows-Version hast du?

    PS: Hast du denn überhaupt (noch) einen Rechner mit einem nativen RS232-Anschluß? Oder benutzt du einen "USB Seriell RS232 Adapter"?



  • Hallo,

    da gehört noch eine Library dazu. Wir sehen hier nur, dass ein Header "asynch_1.h" eingebunden wird. Die wird man vermutlich nicht zum Laufen kriegen, d.h. man wird das ganze RS232-Handling durch ein modernes Äquivalent ersetzen müssen. Das läuft also auf Reverse-Engineering hinaus.

    Ich schätze, zusätzlich zur reinen Anpassung an moderne Systeme werden folgende Schwierigkeiten hinzukommen:

    • Crashes wegen unsauberem Pointer-Gefummel, was zu DOS-Zeiten einfach nicht aufgefallen ist
    • man müsste es im Zusammenspiel mit der Hardware testen und debuggen, die hast aber nur du zur Verfügung

    Als Option würde ich erwägen, einen DOS-Rechner anzuschaffen und das im Original zu betreiben. Der Digital Mars Compiler kann das vielleicht übersetzen, so dass man nicht auf dem DOS-Rechner arbeiten muss.

    http://www.digitalmars.com/download/freecompiler.html

    Nur so ein paar Ideen.



  • Darüberhinaus wäre die dos.h zu ersetzen, falls man zu Fuß übersetzen muss.
    Die Digital Mars-Seite schreibt zu seiner dos.h:

    These are interfaces to the DOS operating system. They generally correspond directly to DOS API calls. They are not portable to operating systems other than DOS.

    ( http://www.digitalmars.com/rtl/dos.html )

    Es könnte aber schon reichen, zum Übersetzen ein 32Bit Windows zu nehmen (weil z.B. Windows Vista 32 recht gute Dos-Kombatibilität hatte bzw. z.B. bei einigen schwierigen Vertretern wie exe2bin ( https://de.wikipedia.org/wiki/EXE2BIN ) mitgemacht hatte ohne meckernd den Dienst zu versagen.)
    Bei schwierigen .com Programmen mit Grafik wollte aber die Grafikkarte nicht mehr so recht mitmachen weswegen
    -> Dosbox https://www.dosbox.com auch noch einen Platz auf der Platte bekommen hatte.



  • Hallo an Alle, super vielen Dank für die Anregungen und Hinweise.
    Jetzt mal von Anfang an, ich habe von diesem EVADTS Verein eine
    komplette Datei per Mail gesendet bekommen. Diese beinhaltet ein
    Programm in C/C++ welches ich zum auslesen der RS232 benutzen wollte.
    (gerne sende ich Euch oder Interessenten die Datei per Mail)
    Auf meinem Computer Windows7 64bit bekomme ich das Programm weder
    mit Visual Studio noch mit Code : Blocks ans laufen. Keine Chance

    Die Maschine sendet die Daten über das Menü "Daten an
    Drucker senden" auch als ASCI Files über die serielle Schnittstelle.
    Das klappt super und ist auch ganz einfach, man kann dann über ein
    Terminalprogramm die Daten einlesen und sofort weiterverarbeiten.
    Leider sind die ASCI Daten nicht komplett bzw. nur ein kleiner Teil.
    Deshalb die Suche nach einem Programm mit dem ich die Daten komplett
    auslesen kann. Dieses Programm von EVADTS ist wohl über 20 Jahre alt.
    So und jetzt die Gretchenfrage: Soll ich versuchen die alte Version
    ans laufen zu bekommen oder soll ich was neues machen? Programme die
    die RS232 Schnittstelle abfragen gibt es schon und sind auch nicht
    so kompliziert Aber ich muss ja auch noch die Daten parsen und um so was
    allein zu programmieren fehlt mir das Wissen und die Zeit, deshalb suche
    ich hier jemanden der mich bei diesem Projekt unterstützt. Wenn jemand
    Lösungsvorschläge hat "Bitte melden" Liebe Grüße jueppes



  • - du kannst versuchen, dein unverändertes Programm in einem DOS-Emulator laufen zu lassen
    - Portierungsversuche klappen prinzipiell nur, wenn du die kompletten Sourcen (d.h. die aller externen Libs) hast
    - und auch dann solltest du prüfen, wieviel DOS-Abhängigkeiten vorhanden sind (typischerweise haben die 16-Bit Jünger damals gern direkt irgendwelche Register beschrieben, Interrupts umgebogen oder gar direkt auf irgendwelche festen Speicheradressen geschrieben)
    - du darfst dein Thema nicht aus den Augen verlieren - du willst keinen DOS-Emulator schreiben sondern dein Programm unter Win32 zum Laufen bringen und deshalb prüfe, wieviele reine DOS-Abhängigkeiten (ohne RS232) vorhanden sind und entscheide, ob du das schaffst
    - wie du richtig erkannt hast gibt es haufenweise Win32-Libs für RS232, du musst dann nur in der Lage sein, diese RS232-Abhängigkeiten in dem alten Programm zu lokalisieren und auf deine neue RS232-Lib umzubiegen - dabei stellt sich natürlich auch die prinzipielle Frage - soll es noch eine Portierung werden und doch gleich eine Neuimplementierung; das hängt von deiner Einschätzung ab, wieviel aus deinem alten Programm ausserhalb der RS232 für dich wichtig ist



  • du bist sehr unklar in deiner Kommunikation:

    ich habe von diesem EVADTS Verein eine
    komplette Datei per Mail gesendet bekommen. Diese beinhaltet ein
    Programm in C/C++ welches ich zum auslesen der RS232 benutzen wollte.
    (gerne sende ich Euch oder Interessenten die Datei per Mail)

    was ist eine "komplette Datei"?

    (gerne sende ich Euch oder Interessenten die Datei per Mail)

    Ist das ein anderes C/C++ als das auf pastebin oder warum sonst sollte die Mail relevant sein?

    du beantwortest fast keine Fragen eindeutig und es ist noch immer unklar was du jetzt gerade überhaupt an Dateien/Programmen hast?

    1. Hast du ein DOS-Program? Fehlermeldung "Nicht unterstützte 16 Bit-Anwendung" deutet stark darauf hin - du hast es aber noch nicht klar gestellt und redest nur ständig von Quelltext den du bekommen hast

    ein Programm ist kein Quelltext

    2. wie viele Quelldateien sind es denn jetzt 1 oder mehrere?
    - in dem pastbin-Quelltext wird auf Dateien verwiesen die du nicht auf pastebin
    gestellt hast - hast du die oder ist das Programm gar nicht kompilierbar

    3. hast du nur die pastebin-Quelltextdatei von dem Verein bekommen? Woher hast
    du dann die DOS-Exe?

    Es kann doch echt nicht so schwer sein deutlich und eindeutig klar zu stellen was sich genau und in welchem Umfang in deinem Besitzt befindet - für den Anfang wäre das schon mal nicht so schlecht - es schreckt Leute massiv ab wenn man dir schon für solche minimal-Details tausend Fragen stellen muss


Anmelden zum Antworten