borland c-datei für visual studio umschreiben



  • hab eine DLL mit zugehöriger c datei!
    die c datei wurde mit borland erstellt.
    hab versucht sie mit visual studio zu kompilieren -> es tauchen mehr als 10 fehler auf (mit borland funzt es einwandfrei)!
    möchte sie aber im visual studio verwenden!
    was muss ich da umschreiben?

    DANKE schon mal im voraus!!!

    hier der code:

    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>

    /* Definitions in the build of inpout32.dll are: */
    /* short _stdcall Inp32(short PortAddress); */
    /* void _stdcall Out32(short PortAddress, short data); */

    /* prototype (function typedef) for DLL function Inp32: */
    typedef short _stdcall (*inpfuncPtr)(short portaddr);
    typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);
    inpfuncPtr inp32;
    oupfuncPtr oup32;

    // Prototyping
    //---------------------------------------------------------------------------
    short inp(short addr);
    void outp(short addr, short data);
    void set_bit(short addr, short byte);
    void clear_bit(short addr, short byte);
    int dll(int load);

    // Byte einlesen
    //---------------------------------------------------------------------------
    short inp(short addr)
    {
    return (inp32)(addr);
    }

    // Byte ausgeben
    //---------------------------------------------------------------------------
    void outp(short addr, short data)
    {
    (oup32)(addr,data);
    }

    // Bit setzen
    //---------------------------------------------------------------------------
    void set_bit(short addr, short bit)
    {
    short z; //Temporärer Speicher

    z = inp(addr); //Aktueller Portstatus einlesen
    z = z | (0x01 << bit); //Entsprechendes Bit setzen
    outp(addr, z); //Neuer Wert ausgeben
    }

    // Bit löschen
    //---------------------------------------------------------------------------
    void clear_bit(short addr, short bit)
    {
    short z; //Temporärer Speicher

    z = inp(addr); //Aktueller Portstatus einlesen
    z = z & ~(0x01 << bit); //Entsprechendes Bit löschen
    outp(addr, z); //Neuer Wert ausgeben
    }

    // DLL Initialisierung bzw. desinitialisierung
    //
    // (load == 1) DLL laden und Funktionen definieren
    // (load == 0) DLL entladen
    //---------------------------------------------------------------------------
    int dll(int load)
    {
    HINSTANCE hLib; //DLL-Objekt

    if (load == 1)
    //DLL laden und Funktionen definieren
    {
    /* Load the library */
    hLib = LoadLibrary("inpout32.dll");

    if (hLib == NULL)
    {
    //printf("LoadLibrary Failed.\n");
    return 0; //Fehlgeschlagen
    }

    /* get the address of the function */
    inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");

    if (inp32 == NULL)
    {
    //printf("GetProcAddress for Inp32 Failed.\n");
    return 0; //Fehlgeschlagen
    }

    /* get the address of the 2nd function */
    oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");

    if (oup32 == NULL)
    {
    //printf("GetProcAddress for Oup32 Failed.\n");
    return 0; //Fehlgeschlagen
    }

    return 1; //DLL erfolgreich geladen
    }
    else
    //DLL entladen
    {
    FreeLibrary(hLib); //Bibliothek entladen
    return 1; //DLL erfolgreich entladen
    }
    }



  • Ändere

    typedef short _stdcall (*inpfuncPtr)(short portaddr); 
    typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);
    

    nach

    typedef short (__stdcall *inpfuncPtr)(short portaddr); 
    typedef void  (__stdcall *oupfuncPtr)(short portaddr, short datum);
    


  • danke schon mal!
    jetzt steh ich aber vor nem neuen Problem!

    hab die c datei abgeändert, und in mein projekt includiert. wenn ich die funktionen der datei aber verwenden möchte, kommt folgende fehlermeldung:

    Kompilierung läuft...
    Treiber.cpp
    c:\dokumente und einstellungen\janny\desktop\displayprogramm\testprogrammt6963c1\inpout32.c(139) : Warnung C4700: Lokale Variable 'hLib' wurde ohne Initialisierung verwendet
    Linker-Vorgang läuft...
    Treiber.obj : error LNK2001: Nichtaufgeloestes externes Symbol _outp
    Debug/EigenerTreiber.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    EigenerTreiber.exe - 2 Fehler, 0 Warnung(en)

    mein code sieht so aus:

    #include "inpout32.c"
    #define P_ADDR 0x0378

    void data(short dat)
    {
    outp(P_ADDR, (dat & 0xFF));
    }

    void main()
    {
    }



  • FreedomRunner schrieb:

    Lokale Variable 'hLib' wurde ohne Initialisierung verwendet

    Das ist halt so. Du darfst diese Variable nicht verwenden, wenn Du Sie nicht vorher initialisiert hast! Fazit: Das mit dem "load=0" und "load=1" funktioniert so nicht!

    FreedomRunner schrieb:

    Treiber.obj : error LNK2001: Nichtaufgeloestes externes Symbol _outp

    Dann verwendest Du halt eine Funktion die es nirgens gibt (was micht auch nicht wuindert, da es diese Funktion nur zu DOS-Zeiten gab... diese sind aber schon längst vorbei).

    PS: Was willst Du eigentlich machen? Es sei nur angemerkt, dass man unter Windows nicht mehr auf die Hardware zugreifen kann.



  • ich möchte ja nur die funktion "outp(short addr, short data);", die in der c-datei deklariert ist in meiner cpp datei verwenden!



  • Der normale Weg ist, dass Du eine H-Datei hast welche die Funktionen deklariert und eine CPP-Datei, welche die Funktionen implementiert.
    Du bindest aber direkt die C-Datei als "include" ein... das ist sehr unüblich. Aber theoretisch hätte es so gehen müssen... oder hast Du doch noch irgendwo eine H-Datei, welche die Funktionen deklariert?
    Wenn Du nämlich die C-Datei direkt in eine CPP-Datei includierst, so wird daraus auch CPP-Code und die Namensauflösung funktioniert dann nicht mehr.
    Also mach es bitte richtig und füge die C-Datei auch Deinem Projekt zu und includiere die H-Datei. Dann sollte es gehen.



  • ich habe aber keine header datei!
    hab dieses programm von jemandem übernommen!
    der hats mit borland geschrieben und includiert auch nur die c-datei!



  • hab jetzt nochmal nur die c-datei alleine kompiliert!
    glaub man muss noch mehrere sachen ändern, es kommen folgende fehler:

    Kompilierung läuft...
    inpout32.c
    c:\dokumente und einstellungen\janny\desktop\neuer ordner\inpout32.c(49) : warning C4028: Formaler Parameter 1 unterscheidet sich von der Deklaration
    c:\dokumente und einstellungen\janny\desktop\neuer ordner\inpout32.c(49) : error C2371: 'inp' : Neudefinition; unterschiedliche Basistypen
    c:\programme\microsoft visual studio\vc98\include\conio.h(93) : Siehe Deklaration von 'inp'
    c:\dokumente und einstellungen\janny\desktop\neuer ordner\inpout32.c(50) : warning C4028: Formaler Parameter 1 unterscheidet sich von der Deklaration
    c:\dokumente und einstellungen\janny\desktop\neuer ordner\inpout32.c(50) : warning C4028: Formaler Parameter 2 unterscheidet sich von der Deklaration
    c:\dokumente und einstellungen\janny\desktop\neuer ordner\inpout32.c(50) : error C2371: 'outp' : Neudefinition; unterschiedliche Basistypen
    c:\programme\microsoft visual studio\vc98\include\conio.h(100) : Siehe Deklaration von 'outp'
    Fehler beim Ausführen von cl.exe.

    inpout32.obj - 2 Fehler, 3 Warnung(en)


Anmelden zum Antworten