为什么用DELPHI开发的DLL输出的FORM,BCB无法调用?

szwxj 2005-10-25 12:38:38
用DELPHI创建一个DLL,输出一个窗体,然后在BCB中调用。

关键代码如下:


方法一:返回类类型
type
TMyFormClass = class of TForm ;

function HelloForm(var aForm : TMyFormClass) : boolean ; stdcall ; export ;
begin
aForm := TForm1;
Result := true ;
end ;

对应的C++的声明应该是:
bool HelloForm (TMetaClass* & aForm) ;

但不知道应该如何创建窗体? DELPHI中可以简单地直接利用返回值:aForm.Create(nil);

方法二:直接返回窗体对象

function HelloForm2(var aForm : TForm ) : boolean ; stdcall ; export ;
begin
aForm := TForm1.Create(nil);
Result := true ;
end ;

对应的C++的声明应该是:
bool HelloForm (TForm* & aForm) ; 或者 bool HelloForm (TForm* * aForm) ;

对应上述声明的调用则是:
TForm* aTestForm ;

HelloForm(aTestForm) ; 或者 HelloForm( &aTestForm) ;

但不知道应该如何显示窗体? DELPHI中可以简单地直接利用返回值:aForm.ShowModal;
C++中利用返回值:
aForm->Left = 0; //right
aForm->ShowModal(); //wrong


谁知道为什么会这样?如何改正?

...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
szwxj 2005-10-25
  • 打赏
  • 举报
回复
唉,顶吧
Jexhat 2005-10-25
  • 打赏
  • 举报
回复
那个“aForm->ShowModal(); //wrong ”出的是什么错?
Jexhat 2005-10-25
  • 打赏
  • 举报
回复
要ShowModal的窗体是应该有父窗体的吧,没有指定....
SydPink 2005-10-25
  • 打赏
  • 举报
回复
appHandle 应该传 主程序里的Application.Handle;
SydPink 2005-10-25
  • 打赏
  • 举报
回复
function HelloForm2(appHandle: THandle) : TModalResult ; stdcall ; export ;
var
aForm: TForm1
begin
Application.Handle := appHandle;
aForm := TForm1.Create(nil);
result :=aForm.ShowModal;
end ;

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧