2006年12月26日
最近在学着做Dephi的程序。
但毕竟做了VC这么多年,原来的OCX想嵌入用,不想再做一遍了。
Dephi嵌个OCX还是很简单,只要用import ActiveX control菜单就可以了。不过问题来了,我原来的OCX有个回调的机制(自己写了个ICallbackMM的Interface,里面有个OnChange函数),怎么让Dephi实现这个ICallbackMM Interface呢?
试了半天,原来方法很简单,
1,在我的new form下,加入一个TMMCallBack就可以了。代码如下:
TMMCallBack = class(TInterfacedObject,ICallBackMMe)
public
procedure OnChange; safecall;
end;
这时,TInterfacedObject可以帮你自动生成AddRef,Release,QueryInterface。
2,我只需要写OnChange函数就可以了。如下:
procedure TMMCallBack.OnChange; safecall;
begin
Form1.ReplyOCXChange;
end;
3,然后在我的Form1中加个成员变量:
mySink: TMMCallBack;
4,把这个mySink传给我的OCX。
MyOCX.Advise(mySink,cookie); // 这个Advise是我原来OCX的函数,可以记下客户端,当OCX有某些改动的话,就调用mySink->OnChange(),当然需要个unAdvise(cookie)。