Ich habe mich gerade mit Fiber beschäftigt um mein Threading Tutorial zu vervollständigen. Dabei bin ich auf etwas mir unverständliches gestossen.
Laut
SDK ist
CreateFiber wie folgt deklariert:
Code:
LPVOID
WINAPI CreateFiber(
SIZE_T dwStackSize,
LPFIBER_START_ROUTINE lpStartAddress,
LPVOID lpParameter
);
Es wird also ein Zeiger zurückgegeben, weil
Zitat:
If the function succeeds, the return value is the address of the fiber.
Als ich eine Demo schreiben wollte, hat mich Delphi immer mit Fehlermeldungen zugeschmissen, weil die Typen angeblich nicht zusammenpassen würden. Nach einem Blick in die Windows.pas wurde mir auch klar warum:
Delphi-Quellcode:
function CreateFiber(dwStackSize: DWORD; lpStartAddress: TFNFiberStartRoutine;
lpParameter: Pointer): BOOL; stdcall;
Man achte auf den Rückgabetyp: BOOL.
Jetzt frage ich mich, was soll das? Steckt da ein tieferer Sinn drin, dass Borland den Rückgabetyp geändert hat? Und dann noch in einen, für mich ziemlich unsinnigen. BOOL entspricht zwar LongBool, welches vier Byte groß ist und somit einen Zeiger beinhalten kann, aber um an den Zeiger dran zukommen ist ein Cast erforderlich.
Also warum hat sich Borland hier für BOOL entschieden und nicht für Pointer? Letztendlich habe ich mir die nötigen Funktionen alle selber noch mal deklariert, damit die Dokumentation zum Quellcode passt.