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 Speicherz = 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 Speicherz = 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-Objektif (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 0x0378void 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)