假如已在DLL中建立了一个简单的窗体,上面只有一个edit,
1.如何在一个新程序中显示这个窗体,
2.不显示DLL窗体,但要取得DLL中窗体上的EDIT的值如何来做?
1.如何在一个新程序中显示这个窗体,
2.不显示DLL窗体,但要取得DLL中窗体上的EDIT的值如何来做?
解决方案 »
- 如何取得局域网其他计算机上的文件
- 连接数据库出现关键字错误,请指教
- 菜鸟问题之四:SQL SERVER 2000触发器的编写(得到答案就结贴)
- 如何提高三层中master-detail嵌套表的效率
- 求购二手《Delphi COM深入编程》
- 【求助】安装LMD.Tools.v7.00.10.For.Delphi的问题
- 简单问题
- ClientDataset有没有ADOQuery的NextRecordSet(i)相似命令
- 谁知道 像迅雷下载列表的列表框是怎么做的
- 有分要送呀!找工作的简单问题!
- 请问如何实现DateTimePacker控件只能选择星期一呢?
- 在局域网中如何实时得知某台机器已经断开网络?
一般就是在窗体单元文件中写一个公开的方法,用于创建这个窗体
要想不显示窗体,那么就不Show或Showmodal就行了,窗体的状态是Visible=False但是,要使用对象或对象的成员,前提是:对象必须被创建(Create)
library ProjectDll;{ 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
Windows,
Messages,
SysUtils,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
UnitDll in 'UnitDll.pas' {Form1};procedure ProvaChild(ParentApplication: TApplication; ParentForm: TForm); export; stdcall;
var
Form1: TForm1;
DllProc: Pointer; { Called whenever DLL entry point is called }begin
Application:=ParentApplication; Form1:=TForm1.Create(ParentForm);
Form1.MyParentForm:=ParentForm;
Form1.MyParentApplication:=ParentApplication;
windows.SetParent(Form1.Handle,ParentForm.Handle);
Form1.FormStyle:=fsMDIChild;
Form1.Show;
from1.visible := false ;
end;procedure DLLUnloadProc(Reason: Integer); register;
begin
if Reason = DLL_PROCESS_DETACH then Application:=DllApplication;
end;exports
ProvaChild;begin
DllApplication:=Application;
DLLProc := @DLLUnloadProc;
end.
第二: 主窗口调用问题unit MainUnit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ToolWin, ComCtrls, Menus;type
TMainForm = class(TForm)
MainMenu1: TMainMenu;
Start: TMenuItem;
procedure StartClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; T_ProvaChild = procedure (ParentApplication: TApplication; ParentForm: TForm); stdcall;var
MainForm: TMainForm;implementation{$R *.DFM}procedure TMainForm.StartClick(Sender: TObject);
var
DllHandle: THandle;
ProcAddr: FarProc;
ProvaChild: T_ProvaChild;
begin
DllHandle := LoadLibrary('ProjectDll');
ProcAddr := GetProcAddress(DllHandle, 'ProvaChild');
if ProcAddr <> nil then
begin
ProvaChild := ProcAddr;
ProvaChild(Application,Self);
end;
end;end.