有一Delphi串口通信控件SPComm,在D下很好使,本人想把它改造为Lazarus版本,而就在控件的Create和Destroy里面卡壳了,在构造函数里有一段代码:
if not (csDesigning in ComponentState) then
FHWnd := AllocateHWnd(CommWndProc);
这是一个消息的传递的语句,把串口的消息传递到创建的一个不可视的窗体中处理,在Lazarus里编译安装包,没问题,但是使用时,一创建就出错,查看了
一下代码,发现是AllocateHWnd的引用不一样,在D下:调用的是
function Forms.AllocateHWnd(Method: TWndMethod): HWND;
begin
{$IFDEF LINUX}
Result := WinUtils.AllocateHWnd(Method);
{$ENDIF}
{$IFDEF MSWINDOWS}
Result := Classes.AllocateHWnd(Method);
{$ENDIF}
end;
而在Lazarus下,变成调用了
function Classes.AllocateHWnd(Method: TWndMethod): HWND;
begin
{ dummy }
runerror(217);
Result:=0;
end;
上BD搜了一下,发现AllocateHWnd应该调用WidGetSet.AllocateHWnd函数才行,还是因为自已对Lazarus不熟悉,经过改造,可以正常发送接收数据;