各位仁兄请帮助我一下!!
我想得到我的应用程序中的函数A的函数指针。如何得到呢?
我的目的是将这个指针传递给一个DLL让这个DLL可以调用这个函数A。
请高手帮助呀!!
问题点数:100、回复次数:5Top
1 楼cuteant(我这张旧床票还能否登上你的破床|涛声是否依旧)回复于 2006-02-18 09:59:06 得分 100
var
vTestEvent: TNotifyEvent;
begin
Pointer((@@vTestEvent)^) := @TForm1.MyClick; //或者通过:TForm1.MethodAddress('MyClick') 方式取函数地址
Pointer(Pointer(Integer(@@vTestEvent) + 4)^) := Pointer(Self);
vTestEvent(nil); //效果和执行 Self.MyClick一样。
end;
var
vMethod: TMethod;
begin
vMethod.Code := TForm1.MethodAddress('MyClick');
vMethod.Data := Self;
TNotifyEvent(vMethod)(nil);//效果和执行 Self.MyClick一样。
end;Top
2 楼zgc7622(张远_7622)回复于 2006-02-18 10:09:28 得分 0
仁兄写的代码中,那个是DLL里面调用的,那个是在EXE中写的呢??Top
3 楼zgc7622(张远_7622)回复于 2006-02-18 10:17:53 得分 0
是这样的我的DLL有 一个导出函数,我想给这个导出函数中传入一个参数就是我EXE中的函数A的指针。
这样我就可以在DLL中调用A函数了。Top
4 楼cuteant(我这张旧床票还能否登上你的破床|涛声是否依旧)回复于 2006-02-18 10:19:53 得分 0
library MyDLL;
uses
SysUtils,
Classes;
{$R *.res}
var
Func: procedure (count: integer); //定义一个函数指针
procedure SetCallbackProc(pFunc: Pointer);
begin
Func:=pFunc; //给函数指针赋值
Func(100); //调用函数
end;
exports
SetCallbackProc;
begin
end.
///////////////////////////////////////////////////////////////////
program MyAPP;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure SetCallbackProc(pFunc: Pointer); external 'MyDLL.dll';
procedure Func(count: integer); //定义回调函数(在DLL里面调用)
begin
WriteLn(count);
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
SetCallbackProc(@Func); //将函数指针传入DLL
ReadLn;
end.Top
5 楼zgc7622(张远_7622)回复于 2006-02-18 11:56:11 得分 0
OK,按照老兄的说法已经搞定了。谢谢!!Top




