一个非常简单的DLL调用的问题?---蓝叶问题真多。答案正确开贴给分。(50分)

  • 主题发起人 主题发起人 蓝叶菱
  • 开始时间 开始时间

蓝叶菱

Unregistered / Unconfirmed
GUEST, unregistred user!
[red]我记得以前的使用DLL做动态连接库做QuickReport报表的例子[/red]如下使用Application的窗口的例子。记忆模糊。
library Project1;
uses
SysUtils,
Classes;

{$R *.res}

begin
Application.CreateForm(TQuickForm1,QuickForm1);//行如
end.
各位给段代码了。
 
看不懂的说.
 
啊,就是做QuickReport的窗体的DLL,
但是它在
libary
.....
begin
Application.CreateForm(TQuickForm1,QuickForm1);//
end.
这样写调用的DLLL,类似上面了。
是在DLL建立窗口
 
很晕的说
 
我也说不大明白了,
那么各位你们写QuickReport的DLL链接库代码,包含调用的代码怎么写的呢?
 
我先看到了本来想发不过我怕意会错意思了!
你可以按正常的做,把做好的窗体加到Dll里面方法写为应该用程序级的,直接调用即可!
 
是啊,给个例子了。
 
begin
Application.CreateForm(TQuickForm1,QuickForm1);
end.
利用这个写动态链接库创建程序呢?
 
不是,我记得以前的QREPORT做报表,是在libary
begin
这个写applicaiton.createFrom
end;
///其实我不想做什么,只是以前的东西突然忘了。。。
看样子象一般的程序一样。。。
 
没看明白。
这是一个DLL窗体的例子
http://www.csdn.net/develop/article/10/10919.shtm
 
library Project1;
uses
SysUtils,
Classes;
uQFROM;{TQUICKFORM1}
{$R *.res}

begin
Application.CreateForm(TQuickForm1,QuickForm1);//行如
end.
就是这样调用怎么写代码,不通过主程序来引入application.handle.
 
你被Application.CreateForm(TQuickForm1,QuickForm1);这句给套死了。
你把这句删了,在DLL的输出函数里去态创建这个FORM,然后用SHOW出来,如果要SHOW模式窗口,就把主程序的句柄传过来赋值给动态库的句柄。
 
那样的我会。
但是我恍惚记得,我意见就是使用的。Application.CreateForm(TQuickForm1,QuickForm1);做DLL的。。。
想研究一下了。。
 
1, 做为dll ,你没有输出函数外部怎么调用它。 它自己有启动不了。

2,它自己没启动,那来的application。。

library Summary;

uses
ShareMem,
SysUtils;

{$R *.res}

exports
LoadPlug, FreePlug;

begin
end.

dll中主窗体中:
procedure LoadPlug(vHandle: THandle
vForm: TForm
Eninfo: Peninfo
vDB: IDB)
stdcall;
begin
Application.Handle := vHandle;
CurEninfo := Eninfo;
DB := vDB;
FrmSummary := TFrmSummary.Create(vForm);
try
FrmSummary.ShowModal;
finally
FrmSummary.Free;
end;
end;
 
给你个好用的,直接将窗口名称改了,套就行了。

library xtbasaccperiod;

{ Important note about DLL memory management: ShareMem must be the
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
Forms,
Windows,
Classes,
Dialogs,
MConnect,
DBClient,
SysUtils,
Unit1 in 'Unit1.pas' {Dlg_OrgDetialForm1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Dlg_OrgDetialForm3};

var
DllScreen: TScreen;
DllApplication: TApplication;

{$R *.RES}

//客户端必须改写以下函数
procedure ShowMdiForm(MDIForm: String)
Export;
begin
//功能模块窗体,修改'Dlg_BasAccperiod'为自己的窗体
if UpperCase(MDIForm) = UpperCase('Dlg_BasAccperiod') then if (not Assigned(Dlg_BasAccperiod)) then
begin
Application := AppInfo.MainApplication;
Screen := Appinfo.ScreenHandle;
Dlg_BasAccperiod := TDlg_BasAccperiod.Create(Application);
end else begin
Dlg_BasAccperiod.WindowState := wsNormal;
Dlg_BasAccperiod.BringToFront;
End;
end;

//以下是动态连接库与主框架接口函数,不要修改
procedure LibraryProc(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
begin
Screen := DllScreen;
Application := DllApplication;
end;
end;

exports
ShowMdiForm;

begin
DllApplication := Application;
DllScreen := Screen;
DLLProc := @LibraryProc;
end.
 
唉,各位老大,我要知道使用Tapplicaiton.createform的。

其他的,蓝蓝还懂点。。。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
831
import
I
后退
顶部