用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
谁知道为什么会这样?如何改正?
方法一:返回类类型
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
谁知道为什么会这样?如何改正?
var
aForm: TForm1
begin
Application.Handle := appHandle;
aForm := TForm1.Create(nil);
result :=aForm.ShowModal;
end ;