Programmieren - alles kontrollieren 4.937 Themen, 20.662 Beiträge

Borland C++ Builder Fehlermeldung

serc / 19 Antworten / Flachansicht Nickles

In einer Headerdatei USB_Interface.h kommt bei den folgenden Zeilen:
#ifndef __AFXWIN_H__
#error include \'stdafx.h\' before including this file for PCH
#endif

folgender Fehler:
[C++ Fatal Error] USB_Interface.h(12): F1003 Error directive: include \'stdafx.h\' before including this file for PCH

Hab dann die stdafx.h eingebunden! Hat nichts gebracht kommt trotzdem noch der selbe Fehler!?
Was muß ich denn da machen!?

bei Antwort benachrichtigen
du musst... thomas woelfer
der punkt ist, thomas woelfer
Antwort Andreas42
Antwort mr.escape
Antwort ??? serc
Antwort ??? mr.escape
Antwort ??? serc
Antwort ??? mr.escape
Antwort ??? serc
Antwort ??? mr.escape
Antwort ??? serc
Antwort ??? mr.escape
Antwort ??? serc
mr.escape serc „Antwort ???“
Optionen

Statt "USB_Interface.h" und "USB_Interface.dll" zu verwenden, kann man auch "USBDLL.h" und "AN21xx.dll" verwenden (mit einem
extern "C"
wie in "USB_Interface.h" "verfeinert" um C++ dekorationen zu vermeiden und der verwendung von "dllimport" statt "dllexport").

Was fehlt, ist eine import-lib, die aber für "USB_Interface.dll" ebenfalls fehlt. Da aber mit "USB_Interface.cpp" diese DLL nachbildbar ist, lässt sich die lib einfach erzeugen. Für "AN21xx.dll" lässt sich das mit den genannten mitteln (link1 und link2) erzeugen oder evtl. direkt (weil das eine borland DLL ist) aus "AN21xx.dll" mit borland-tools (hierzu kann ich nicht viel sagen).
Der aufruf der funktionen ist jeweils identisch, außer für "SetAllDisabled". Das taucht aber außer in "USB_Interface.h" nirgendwo auf und ist somit vermutlich überflüssig. Die funktionen "ReOpen" und "CloseLib" sind unnötig, denn diese betreffen das dynamische (runtime) laden der DLL und das wäre durch die loadtime anbindung per import-lib schon erledigt.

Eine probeweise verwendung der generierten import-lib in VC++ war nicht erfolgreich, weil bei der (erforderlichen) deklaration __stdcall der linker den importnamen so verändert, dass die funktion nicht gefunden wird, bei "_cdecl" hingegen der stackpointer beim aufruf falsch gesetzt wird. Hierzu näheres hier.

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
Antwort Andreas42