Moin,
über eine Diskussion im Sourceforge-Forum für die CPort-Kompo bin ich auf ein merkwürdiges Verhalten des CB-Linkers gestoßen, das mit schon einmal aufgefallen ist. Jetzt, wo ich es zum wiederholten Mal sehe, wollte ich es mal zur Sprache bringen und klären, ob und wo ein Fehler stecken könnte.
Installiert man die CPort-Kompo für CB, bekommt man einen Linker-Fehler "unresolved external" der auf eine nicht vorhandene Funktion SetPortA verweist. Diese ist in der zugrundeliegenden Datei CPort.pas aber nicht vorhanden. Wohl gibt es dort eine Routine SetPort, die den ComPort setzen soll.
Der Linker verweist nun zunächst auf eine function SetPort in der winspool.h, die dort auf die
API-Routine SetPortA verweist:
Code:
BOOL
WINAPI
SetPortA(
__in_opt LPSTR pName,
__in LPSTR pPortName,
DWORD dwLevel,
__in LPBYTE pPortInfo
);
BOOL
WINAPI
SetPortW(
__in_opt LPWSTR pName,
__in LPWSTR pPortName,
DWORD dwLevel,
__in LPBYTE pPortInfo
);
#ifdef
UNICODE
#define SetPort SetPortW
#else
#define SetPort SetPortA
#endif // !
UNICODE
Beim Linken scheint er dann korrekterweise die SetPortA zu ignorieren und referenziert auf SetPortW, dann fehlt aber wohl der noch vorhandene Verweis auf die SetPortA.
Durch Umbenennen von SetPort in der CPort.pas lässt sich das Problem umgehen. Nun habe ich das aber schon mindestens einmal gehabt (TMS
unicode tools) und denke, das Linker-Verhalten ist fehlerhaft. Denn wenn jemand die Routine der winspool.h benutzen will, bekommt er ja vielleicht dasselbe Problem.
Bisher habe ich Fehler immer bei mir selbst gesucht und würde gerne mal eine Einschätzung dazu haben: ist das ein Fehler, wo kann man ihn melden und ist der evtl. schon bekannt?
Grüße, Messie