我在BCB里写了一个简单的窗体而后封装成DLL,由DELPHI调用,在DELPHI的MAINMENU中将BCB 的窗体调用出来,但是我将它设置为子窗体就报错
Cannot create form.No MDI forms are currently active.都快崩溃了,不知道该怎么办啦~~大家帮帮忙~!
BCB中的代码:
USERES("cheshi1.res");
USEFORM("csForm1.cpp", cForm1);
TcForm1* DllMyForm;
extern "C" __declspec(dllexport) __stdcall void CreateFromFunct();
//---------------------------------------------------------------------------#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
return 1;
}
//---------------------------------------------------------------------------void __stdcall CreateFromFunct()
{
DllMyForm = new TcForm1(Application);
DllMyForm->FormStyle = fsMDIChild;
DllMyForm->Show();
}
//---------------------------------------------------------------------------DELPHI中的调用
implementation
procedure CreateFromFunct(); stdcall external 'dll1\ceshi1.dll';{$R *.DFM}procedure TYourForm.N21Click(Sender: TObject);
begin
CreateFromFunct();
end;
Cannot create form.No MDI forms are currently active.都快崩溃了,不知道该怎么办啦~~大家帮帮忙~!
BCB中的代码:
USERES("cheshi1.res");
USEFORM("csForm1.cpp", cForm1);
TcForm1* DllMyForm;
extern "C" __declspec(dllexport) __stdcall void CreateFromFunct();
//---------------------------------------------------------------------------#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
return 1;
}
//---------------------------------------------------------------------------void __stdcall CreateFromFunct()
{
DllMyForm = new TcForm1(Application);
DllMyForm->FormStyle = fsMDIChild;
DllMyForm->Show();
}
//---------------------------------------------------------------------------DELPHI中的调用
implementation
procedure CreateFromFunct(); stdcall external 'dll1\ceshi1.dll';{$R *.DFM}procedure TYourForm.N21Click(Sender: TObject);
begin
CreateFromFunct();
end;
解决方案 »
- DELPHI中,用ADOQUERY1作数据源,用DBGRID呈现数据,如何感应到DBGRID中的数据已经改变?
- 三层的问题,一头雾水,请解惑,谢谢。
- 请问如何用ado连接远程的foxpro表,不用odbc如何做?
- fastreport 中 richtext赋值的问题
- 求解:如何利用将excel文件的数据导入到dbf数据库中?
- Delphi中的XPManifest(xpman)组件怎么用,是做什么的
- 100分,如何处理ADOQuery异常?
- 在程序中动态创建的控件在窗体关闭时是否要释放掉?
- 如何用程序使Memo翻到最后一页?
- 救急!char **str;的数据用Object Pascal描述应该是什么
- ClientDataSet怎样更新一个多表连接的结果集
- 请教一下各位大大,有没有DSA数字签名的辅助计算工具? (分不是问题)
{
Application->Handle=hApp;
DllMyForm = new TcForm1(Application);
DllMyForm->FormStyle = fsMDIChild;
DllMyForm->Show();
}
implementation
procedure CreateFromFunct(); stdcall external 'dll1\ceshi1.dll';
{$R *.DFM}procedure TYourForm.N21Click(Sender: TObject);
begin
CreateFromFunct(Application.handle);
end;但是报错:Too many actual parameters.......
procedure CreateFromFunct(HWND hApp); stdcall external 'dll1\ceshi1.dll'; //这里
{$R *.DFM}procedure TYourForm.N21Click(Sender: TObject);
begin
CreateFromFunct(Application.handle);
end;当然Dll的接口和创建Form的函数也得改
USERES("cheshi1.res");
USEFORM("csForm1.cpp", cForm1);
TcForm1* DllMyForm;
extern "C" __declspec(dllexport) __stdcall void CreateFromFunct();
//---------------------------------------------------------------------------#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
return 1;
}
//---------------------------------------------------------------------------void __stdcall CreateFromFunct(HWND hApp)
{
Application->Handle = hApp;
DllMyForm = new TcForm1(Application);
DllMyForm->FormStyle = fsMDIChild;
DllMyForm->Show();
}
//---------------------------------------------------------------------------DELPHI:
implementation
procedure CreateFromFunct(HWND hApp); stdcall external 'dll1\ceshi1.dll';
procedure CreateFromFunct1(); stdcall external 'dll2\cheshi2.dll';
{$R *.DFM}procedure TYourForm.N21Click(Sender: TObject);
begin
CreateFromFunct(Application.handle);
end;OTZ~~~OTZ~~~OTZ
void __stdcall CreateFromFunct(HWND hApp)
{
Application->Handle = hApp;
DllMyForm = new TcForm1(Application);
DllMyForm->FormStyle = fsMDIChild;
DllMyForm->Show();
}
是不是这里还有问题呢???
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }uses
SysUtils,
Classes,
Forms,
Dialogs,
Unit1 in 'Unit1.pas' {Form1};{$R *.res}procedure CreateFromFunct(AppRes, MainRes: LongInt); stdcall;
begin
Application := TApplication(AppRes); //类型强制转换
Form1 := TForm1.Create(TForm(MainRes));
Form1.FormStyle := fsMDIChild;
Form1.Show();
end;exports CreateFromFunct;begin
end.//MDI主窗口var
Form1: TForm1;implementationprocedure CreateFromFunct(AppRes,MainRes: LongInt); stdcall external 'Project1.dll';{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
CreateFromFunct(LongInt(Application), LongInt(Form1));
end;