Конечно строгая типизация в компонентном паскале дело хорошее. Но это головная боль для тех кто пользует WinApi функции.
Как передать параметр типа WinApi.PtrSTR в функцию WinApi.MessageBoxA?
Например:
Код:
MODULE Test;
IMPORT WinApi, SYSTEM;
VAR Msg: ARRAY 255 OF CHAR;
Res: INTEGER;
BEGIN
Msg:="Иди работай";
Res:=WinApi.MessgaeBoxA(HWnd, Msg, "Сообщение" , {4,5});
END Test.
На такое компилятор ругнется. Типы не соответствуют. Если вместо Msg передать указатель, SYSTEM.ADR(Msg):
Res:=WinApi.MessgaeBoxA(HWnd, SYSTEM.ADR(Msg), "Сообщение" , {4,5});
То тоже ругается.
Если Msg перевести к типу WinApi.PtrSTR с помощью SYSTEM.VAL(WinApi.PtrSTR, Msg):
Res:=WinApi.MessgaeBoxA(HWnd, SYSTEM.VAL(WinApi.PtrSTR, Msg), "Сообщение" , {4,5});
То проглотит. Но при запуске выведет ошибку...
Как поуму передавать в функции WinApi параметры?