窗口封装问题,高手请进 (300分)

  • 主题发起人 主题发起人 delphi!!!
  • 开始时间 开始时间
D

delphi!!!

Unregistered / Unconfirmed
GUEST, unregistred user!
我想封装一个TfrmDemo=Class(TForm)到DLL
1、将TfrmDemo类封装到DLL
TfrmDemo= class(TForm)
public
{传入参数}
FPublicVar:Pchar;
{接口函数}
procedure Save();virtual;
procedure Print();virtual;
end;

将TfrmDemo单元添加到DLL即可。
2、主程序通过调用DLL的初始化函数获得窗口实例的句柄
主程序声明TfrmDemo类:
TfrmDemo= class(TForm)
public
{传入参数}
FPublicVar:Pchar;
{接口函数}
procedure Save()
virtual
abstract;{在DLL中定义的TfrmDemo含此函数的实现}
procedure Print()
virtual
abstract;{在DLL中定义的TfrmDemo含此函数的实现}
end;
并初始化
如frmDemo:=InifrmDemo
{InifrmDemo为DLL的窗口初始化函数}
3、主程序可以传递一些参数给frmDemo,如
frmDemo.FPublicVar:='Value from program. (Not DLL)';
4、主程序可以调用frmDemo的函数,如frmDemo.Print;
前面1、2都可以实现了,问题是第3、4步如何实现?

为什么我调用frmDemo.Caption返回正确,
而frmDemo.Print则出现Access Violation...错误?
frmDemo.FPublicVar也不能传递值给DLL?

请高手解答,谢谢!
 
dll中的方法也应使用virtual关键字(晚绑定的方法,因为编译时无法知道DLL中静态方法是怎样实现)
 
有virtual的,忘了写上了
 
再新建一个类。以TfrmDemo为基类。
然后方法都在新建的子类中实现。
 
在你的dll工程文件的uses里面的第一个单元前面加上ShareMem单元试一试。
 
我也不明白,希望大家说明白点
 
学习!·!!
 
如果DLL和EXE中的关于TDemoForm的定义是完全一样(保证VMT是一样),然后在DLL初始化生成实例时,返回此实例的指针或强转成整数。
在EXE中再把指针或整数强行赋值给类型为TDemoForm的变量(其实也就是指针)
 
后退
顶部