一
一个过客
Unregistered / Unconfirmed
GUEST, unregistred user!
一个主form,提供一个Panel供其他DLL使用,我希望其他人能够在这个Panel上面
随便放置自己的东西,比如一个TMemo,并且我会传递给DLL必要的数据进行处理。
也就是说有点类似Plugins的机制:我把Panel的句柄传递给DLL,DLL在Panel上面
做自己想做的事。
可是这么一个简单的东西居然怎么也出不来,问题处在参数的传递上面,
最起初我为了能够照顾到VC的程序员,于是决定传递Panel.Handle过去,这是个
标准的Windows句柄,什么语言都可以使用,并且我也用Delphi写了一个DLL的
例子代码,用纯SDK的方式(Createwindow...)实现了添加一个Memo到Panel上面,
但是后来考虑到SDK方式开发效率太低,于是决定放弃对VC的支持,只支持
Delphi就够了,这样我就可以把Panel这个VCL对象传递过去,就可以在DLL里面
使用强大的VCL类库了(想当然的),但是结果却并不如人意,例子如下:
//DLL 代码片断
function FilterData(ParentPanel:TPanel):integer;stdcall;
var memo:tmemo;
begin
memo:=tmemo.create(ParentPanel);
//ParentPanel就是主窗口传递过来的Panel
memo.parent:=ParentPanel;
memo.align:=alclient;
memo.text:='ok!';
end;
主程序调用的时候出错,说什么:
Cannot assign a TFont to a TFont
什么意思?
或者大家有更好的办法实现我的要求??
随便放置自己的东西,比如一个TMemo,并且我会传递给DLL必要的数据进行处理。
也就是说有点类似Plugins的机制:我把Panel的句柄传递给DLL,DLL在Panel上面
做自己想做的事。
可是这么一个简单的东西居然怎么也出不来,问题处在参数的传递上面,
最起初我为了能够照顾到VC的程序员,于是决定传递Panel.Handle过去,这是个
标准的Windows句柄,什么语言都可以使用,并且我也用Delphi写了一个DLL的
例子代码,用纯SDK的方式(Createwindow...)实现了添加一个Memo到Panel上面,
但是后来考虑到SDK方式开发效率太低,于是决定放弃对VC的支持,只支持
Delphi就够了,这样我就可以把Panel这个VCL对象传递过去,就可以在DLL里面
使用强大的VCL类库了(想当然的),但是结果却并不如人意,例子如下:
//DLL 代码片断
function FilterData(ParentPanel:TPanel):integer;stdcall;
var memo:tmemo;
begin
memo:=tmemo.create(ParentPanel);
//ParentPanel就是主窗口传递过来的Panel
memo.parent:=ParentPanel;
memo.align:=alclient;
memo.text:='ok!';
end;
主程序调用的时候出错,说什么:
Cannot assign a TFont to a TFont
什么意思?
或者大家有更好的办法实现我的要求??