奇招:用 EXE 导出函数!(0分)

黑天

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 固然是一种编程技巧,但是,这一次
是不是更绝? ==========> 看你如何应用了,呵呵。
 
这办法我是几年前就会了, 不过没什么实用, 只能算旁门左道.
 
动态连接库不一定是dll也可以是exe,在上vc课的时候,老师就教过了
不过,还是谢谢你。
 
不错,挺好!
 
接受答案了.
 
顶部