主要原因是C++语言里并没有类引用机制。
我用上面的方法可以生成一个对象,可是总不知道那有些问题。
实际中我这样用过:
建一个pas文件,让C++ Builder的程序调用它的方法。
// Delphi Pascal文件: CreateObject.pas
//-----------------------------------------------------------------------
unit CreateObject;
interface
uses
Classes;
function CreateDelphiObject(cc: TComponentClass;
parent: TComponent): TComponent;
implementation
function CreateDelphiObject(cc:TComponentClass;
parent: TComponent): TComponent;
begin
Result := cc.Create(parent);
end;
end.
// C++ Builder中的使用使用测试 Unit1.cpp
//------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h" // Unit2为TForm2的文件
#include "CreateObject.hpp" // CreateObject.pas编译生成的头文件
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TForm* aForm;
aForm = dynamic_cast<TForm*>(CreateDelphiObject(__classid(TForm2), this));
if( aForm )
aForm->Show();
}
//---------------------------------------------------------------------------
测试方法:
1.在文本编辑器中写好CreateObject.pas,保存;
2.在C++ Builder中新建一个Project;
3.在新工程中另建一个Form2;在Project|Option中将Form2从Auto_create forms列表中除去。
4.将CreateObject.Pas加入到新工程中,按Alt+F9单独编译CreateObject.pas;将生成CreateObject.hpp;
5.在Unit1.cpp中加入
#include "Unit2.h"
#include "CreateObject.hpp"
6.在Form1在放一个按钮,击点,源码编辑器中出现TButton1Click的代码框架,在其中填入:
TForm* aForm;
aForm = dynamic_cast<TForm*>(CreateDelphiObject(__classid(TForm2), this));
if( aForm )
aForm->Show();
7.按F9编译,运行。
8.在Project1运行窗口中点Button1,应出现新窗口Form2.
利用我们生成的CreateOject.pas,可以生成任何控件。