请教各位大侠一个概念性的问题 (0分)

  • 主题发起人 主题发起人 awfigsk
  • 开始时间 开始时间
A

awfigsk

Unregistered / Unconfirmed
GUEST, unregistred user!
type
TInitTestLibrary=Function (Size:Dword;PAutoClassInfo:Pointer):Boolean;Stdcall;
var
InitTestLibrary:TInitTestLibrary;

@InitTestLibrary:=GetProcAddress(...);
我想请问一下,@initTestLibrary不是取了initTestLibrary的地址吗?请问
@InitTestLibrary:=GetProcAddress(...);这是取一个地址覆盖原来的地址吗?还是
在initTestLibrary的址址存放另一个地址?不懂。还请高手指点!谢谢!
另外这样赋值后,是不是可以直接调用initTestLibrary这个变量当作函数使用?
stdcall这个关键的意义是什么?
 
@InitTestLibrary:=GetProcAddress(...);
^^^^^^^^^^^^^^^^
指针的地址,多此一举.反而然初学者糊涂
InitTestLibrary:=GetProcAddress(...);即可
这句话就是时说通过GetProcAddress把DLL文件中的函数地址取出来.
让InitTestLibrary则个函数指针指向GetProcAddress取出的那个函数地址.
stdcall表示调用规则:

关键字 参数传递方式 恢复方式
stdcall 从右到左 被调用一方 (Win32标准)
cdcel 从右到左 调用程序
safecall 从右到左 被调用一方
fast-call 从左到右 使用寄存器(delphi缺省)
pascal 从左到右 被调用一方(win3.x缺省)
所以不加Stdcall就是Fast-call.而在DLL中要被其他程序共享就要遵守Win32规则.
 
wr960204是对的.
 
type
TInitTestLibrary=Function (Size:Dword;PAutoClassInfo:Pointer):Boolean;Stdcall;
stdcall是指上面函数中参数的调用方向吗?从右到左是什么意思?而恢复方式又是什么意思
呢?
另外如何引用InitTestLibrary它所指向的函数呢?最上面那个指针问题是否是让
InitTestLibaray这个变量的址址指向函数的地址?当要引用该函数时,则用@InitTestLibrary?
还望指点!谢谢!
 
这样写只不过是为了清析一点吗,否则就象函数调用了,其实你也可以把@去掉,效果是一样的,如果你不信的话,可以试一下。
 
接受答案了.
 
后退
顶部