Typenprüfung bei FARPROC VS 2003 vs. VS 2008
-
Hallo Leuts,
ich habe folgendes Problem: Ich möchte auf iButtons von Dallas/Maxim zugreifen. Dazu stellt Maxim eine DLL bereit.
Ebenfalls wird für VS 2003 ein Beispielprogramm mitgeliefert. Dieses läßt sich fehlerfrei compilieren und arbeitet ebenso fehlerfrei.
Anhand dieses Beispiels möchte ich mein eigenes Programm in VS 2008 entwickeln.
Im Beispiel wird zunächst die DLL geladen und dann werden die Einsprungadressen ausgelesen und in Pointer gespeichert.
Ich habe hier nur eine Funktion rauskopiert, weil die mir Probleme macht...static HINSTANCE hInst; static FARPROC TMReadDefaultPort; .... hInst = LoadLibrary("IBFS32.dll"); if (hInst != NULL) { TMReadDefaultPort = GetProcAddress(hInst,"TMReadDefaultPort"); } ... TMReadDefaultPort(&PortNum, &PortType);
Dies ist Originalcode!
Bei VS 2003 wird es fehlerfrei compiliert, VS 2008 meldet beim Aufruf (letzte Codezeile)error C2197: "FARPROC": Zu viele Argumente für Aufruf.
Hat sich irgendwie die Typenprüfung zwischen 2003 und 2008 geändert ? Und wie muß ich die Funktion richtig deklarieren ?
Greets
Thule
-
Gib TMReadDefaultPort die korrekte Signatur und case nur das Ergebnis von GetProcAddress.
FARPROC hat keine Argumente und da hat der COmpiler recht. Und das war auch unter VS2003 schon so, außer die hast alle Wsrnings ausgeschaltet.
Der Code kann nicht fehlerfrei compilieren!
-
Doch, er tut es !!!!!
-
Hast du den Code vielleicht einmal als C und einmal als C++ compiliert?
Ich in glaube C ist das ok bzw. wird geduldet.Tatsache ist jedoch FARPROC ist definiert als
typedef int (CALLBACK* FARPROC)();
Du brauchst eher
typedef int (CALLBACK* TMReadDefaultPort)(DATENTYP1,DATENTYP2);
-
Thule schrieb:
Doch, er tut es !!!!!
Nein! Definitv nicht. Habe gerade den Testgemacht. In einer CPP Datei kommt klar die slebe Fehlermeldung, sogar VC6 erkennt dass dies Käse ist!
Mit diesem Code:
static HINSTANCE hInst; static FARPROC TMReadDefaultPort; void Foo() { hInst = LoadLibrary(_T("IBFS32.dll")); if (hInst != NULL) { TMReadDefaultPort = GetProcAddress(hInst,"TMReadDefaultPort"); } int PortNum, PortType; TMReadDefaultPort(&PortNum, &PortType); }
-
C ist da wirklich toleranter als C++.
Danke für den Tip, ihoernchen