黑
黑天
Unregistered / Unconfirmed
GUEST, unregistred user!
一般地,对于一个 EXE,我们总会认为这不过是一个正常的应用而已,然而,你有没有
想过:就是这样一个 EXE, 也可以导出 DLL 函数!下面告诉你怎么做:
#### 被调应用(这里不写 DLL 了,因为它是一个完整的应用程序)
添加一个导出函数:
function GetWord: Longint; stdcall;
然后在工程文件(工程是什么?倒...)的 begin 之前,加入:
exports
GetWord Index 1;
OK!结束 ===> 当然,你得重新编译一下。
### 主调应用
这里要说明的是:一般地,我们对于DLL会采取隐式调用,但对此类应用却不行,你可以
试试,一运行就出错!为什么 ========> EXE 怎么会有 DLL 的初始化例程呢?所以,
你只要采用显式调用!
建立一个 Application,用来调用这个 EXE/DLL(怎么称呼都行...),加入下面代码:
procedure TForm1.Button1Click(Sender: TObject);
type
TDllProc = function: Longint;
var
hDll: HModule;
DllWord: Longint;
Proc: TDllProc;
begin
hDll := LoadLibrary('lanspy.exe');
DllWord := 0;
if hDll <> 0 then
begin
Proc := TDllProc(GetProcAddress(hDll, 'GetWord'));
if Proc <> 0 then
DllWord := Proc;
end;
FreeModule(hDll);
Edit1.Text := IntToStr(DllWord);
end;
编译,运行,怎么样?仔细想想你的应用吧,使用 DLL 固然是一种编程技巧,但是,这一次
是不是更绝? ==========> 看你如何应用了,呵呵。
想过:就是这样一个 EXE, 也可以导出 DLL 函数!下面告诉你怎么做:
#### 被调应用(这里不写 DLL 了,因为它是一个完整的应用程序)
添加一个导出函数:
function GetWord: Longint; stdcall;
然后在工程文件(工程是什么?倒...)的 begin 之前,加入:
exports
GetWord Index 1;
OK!结束 ===> 当然,你得重新编译一下。
### 主调应用
这里要说明的是:一般地,我们对于DLL会采取隐式调用,但对此类应用却不行,你可以
试试,一运行就出错!为什么 ========> EXE 怎么会有 DLL 的初始化例程呢?所以,
你只要采用显式调用!
建立一个 Application,用来调用这个 EXE/DLL(怎么称呼都行...),加入下面代码:
procedure TForm1.Button1Click(Sender: TObject);
type
TDllProc = function: Longint;
var
hDll: HModule;
DllWord: Longint;
Proc: TDllProc;
begin
hDll := LoadLibrary('lanspy.exe');
DllWord := 0;
if hDll <> 0 then
begin
Proc := TDllProc(GetProcAddress(hDll, 'GetWord'));
if Proc <> 0 then
DllWord := Proc;
end;
FreeModule(hDll);
Edit1.Text := IntToStr(DllWord);
end;
编译,运行,怎么样?仔细想想你的应用吧,使用 DLL 固然是一种编程技巧,但是,这一次
是不是更绝? ==========> 看你如何应用了,呵呵。