首先对Langer给出的answer表示感谢!
我的COM服务器(Exe,本地服务器)中的绘制函数是这样写的
Drawtext(Hdc:Thandle;Content:String)
begin
...
textout(hdc,10,10,content,20);
...
end;
在包含COM服务器的主窗口中,创建服务器对象,然后把主窗口的handle传递出去,是可以在主窗口中显示文本内容(我想是因为在同一进程中)
......
private
Imyinterface:IMyTextCom;//IMyTextCom是我的COM提供的接口,包含Drawtext服务。
.....
procedure TForm1.FormCreate(Sender: TObject);
begin
Imyinterface:=coMyTextCom.create;
end;
....
procedure TForm1.Button1Click(Sender: TObject);
var
hd:Thandle;
begin
hd:=form1.canvas.handle;
Imyinterface.drawText(hd,'hello');
end;
但是在我编写了客户程序中,我把客户程序中的界面元素Handle送给服务器,却无法实现文本绘制,我想是否是因为在不同的进程中,Window handle不一致的原因呢?该如何传递参数呢?请指教。客户端调用的代码如下:
procedure TForm1.BtnDrawTextClick(Sender: TObject);
var
hwd:THandle;
begin
hwd:=form1.Canvas.Handle;
IClientInf.Drawtext(hwd,'Hello');//IClientInf是在客户窗体Create时创建的COM服务器的接口;
end;
这种方法在客户端界面(Form)中不能显示文本。