我曾用以下方法调用 dll 中的函数,程序可以运行:PFunc: TFarProc;...OneHandle := LoadLibrary('test.dll'); //动态载入DLL,并返回其句柄
Pfunc := TFarProc(GetProcAddress(Onehandle,'Instr'));
Pfunc('hello !');后来看到好像这是正规用法(还没用):PFunc: TFarProc;...OneHandle := LoadLibrary('test.dll'); //动态载入DLL,并返回其句柄
@Pfunc := TFarProc(GetProcAddress(Onehandle,'Instr'));
Pfunc('hello !');到底那种方法正确,能解释一下吗?

解决方案 »

  1.   

    抱歉,第二种方法写错了,应是这样:PFunc: TFarProc;...OneHandle := LoadLibrary('test.dll'); //动态载入DLL,并返回其句柄
    @Pfunc := GetProcAddress(Onehandle,'Instr');
    Pfunc('hello !');
      

  2.   

    两个都一样
    第一个使用TFarProc强制转换为函数指针。
    第二个省掉使用强制转换。GetProcAddress返回函数的地址。
      

  3.   

    谢谢slzzg(懒虫) ,顺便问一下,比较函数指针是否有效,为什么用下面的语句:if (@PFunc<>nil) then
    ...而不能这样用:if (PFunc<>nil) then
    ...
      

  4.   

    PFunc是一个指针。
    @PFunc表示指针只向内容申请一个指针的时候,就有了一个数值(DWORD类型)。
    只有指针指向的内容<>nil,才说明GetProcAddress成功。