用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 
谁知道为什么会这样?如何改正?

解决方案 »

  1.   

    function HelloForm2(appHandle: THandle) : TModalResult ; stdcall ; export ;
    var
      aForm: TForm1
    begin
    Application.Handle := appHandle;
    aForm := TForm1.Create(nil);
    result :=aForm.ShowModal;
    end ;
      

  2.   

    appHandle 应该传 主程序里的Application.Handle;
      

  3.   

    要ShowModal的窗体是应该有父窗体的吧,没有指定....
      

  4.   

    那个“aForm->ShowModal();  //wrong ”出的是什么错?