通过一个配置程序配置后,可以在主程序的菜单中显示并调用dll中的窗体 ( 积分: 100 )

  • 主题发起人 主题发起人 liudinglong
  • 开始时间 开始时间
L

liudinglong

Unregistered / Unconfirmed
GUEST, unregistred user!
通过一个配置程序配置后,可以在主程序的菜单中显示并调用dll中的窗体,而主程序

中不用写调用dll中窗体的代码。(关键就是这个配置程序怎么写,往下继续看)

具体要求如下:

1。做个主调用程序 Projiect1(1个窗体,窗体上有菜单)

2。被调程序Dll (Project2)有一个窗体 ,因为团队开发时候,各自写各自的dll中的窗体,

写完自己的窗体后,只需要配置一下公司写的配置程序,这个配置程序需要配置下dll的名

字,配置dll的导出函数名,配置在主程序中显示的名字。然后主程序的菜单就能看到并可

调用自己写的dll中的窗体了,而主程序根本不需要编译。

主程序Project1中不用写声明调用静态dll的声明,真不知道是怎么实现的

我们公司就是这样做的,我很想知道原理是什么,谢谢!!!
 
哦 很多程序都是这样的啊!! 动态调用DLL啊
 
你都没说怎么解决啊``````[:(]
 
动态装入DLL,要用到Windows的三个API函数。Loadlibrary、Freelibrary和GetprocAddress 。 loadlibrary函数用来装入DLL库,其调用格式如下:

function loadlobrary (DLLfileName:Pchar): THandle:

当不再需要一个DLL库时,应调用FreeLibrary函数将其释放,以空出宝贵的内存资源,其调用格式如下:

procedure FreeLibrary (Libmodule:THandle)

Libmodule 为由LoadLibrary调用得到的DLL库句柄。在用loadlibrary 函数装入某个DLL库和调用FreeLibrary释放该DLL库之间的程序段中, 可以使用该DLL库中的过程和函数,具体使用方法是:用GetprocAddress函数把DLL库中函数的地址传递给程序中某个函数变量,再用该变量实现DLL函数的调用。GetprocAddress函数声名如下
function GetprocAddress (Libmodule:THandle:procname:pchar):TFarProc:
如下例所示:
type
TTimeRec = record
Second: Integer;
Minute: Integer;
Hour: Integer;
end;
TGetTime = procedure(var Time: TTimeRec);
THandle = Integer;
var
Time: TTimeRec;
Handle: THandle;
GetTime: TGetTime;
...
begin
Handle := LoadLibrary('DATETIME.DLL');
if Handle <> 0 then
begin
@GetTime := GetProcAddress(Handle, 'GetTime');
if @GetTime <> nil then
begin
GetTime(Time);
with Time do
WriteLn('The time is ', Hour, ':', Minute, ':', Second);
end;
FreeLibrary(Handle);
end;
end;

在调用动态链接库时应注意, 所需动态链接库须与应用程序在同一目录或Windows System 目录下。

动态链接库是 Windows下程序组织的一种重要方式,使用动态链接库可以极大地保护用户在不同开发工具、不同时期所做的工作,提高编程效率。
 
你们说的那动态调用和静态调用我都会了````

主要是怎么写那个配置程序??

没回答到点儿上呢``````````[:(]
 
用一个INI文件就可以搞定
[所有的DLL]
DLL1=*.DLL
...
 
建议菜单动态,菜单项放在数据库中,每项菜单加载的dll文件名与函数名都在数据库中定义。
 
好象都不理想哦```
这分儿给谁啊```[:(][:(]
 
这问题也太简单了吧。
我做的一个系统架构完全符合你的需求。
 
你的让我看看行吗,我qq:21209183
 
后退
顶部