請邦忙解釋一段 winsock代碼(100分)

  • 主题发起人 主题发起人 wlq
  • 开始时间 开始时间
W

wlq

Unregistered / Unconfirmed
GUEST, unregistred user!
別人的一段代碼﹐與winsock有關

在type中﹕
TIcmpCreateFile = function: THandle; stdcall;???

var:
IcmpCreateFile:TIcmpCreateFile;
...

@ICMPCreateFile := GetProcAddress(hICMPlib, 'IcmpCreateFile');

誰能告訴我這是什么意思?

 
看看动态链接库的一些函数帮助吧。
hICMPlib := LoadLibrary('some.dll');//装入动态库
@ICMPCreateFile := GetProcAddress(hICMPlib, 'IcmpCreateFile');//获取函数的入口地址
FreeLibrary(hICMPlib);//释放动态库
 
其实和 Winsock 没有很大关系:这段代码就是申明一个函数类型,一个该类型的函数指针,
然后在装载后的 DLL 中找到这个函数地址赋给这个指针,然后就可以调用 DLL 里的函数了。
申明函数类型指针,而不是无类型指针的目的是告诉编译器如何去调用这个函数。
 
TIcmpCreateFile = function: THandle; stdcall;
表示定义一个函数指针类,TIcmpCreateFile为类名,可指向具体函数
function为类别,THandle为返回值,stdcall表示此函数为回调函数
(关于此可在帮助索引中键入:function calls,
再选择Procedural types in statements and expressions项)

var:
IcmpCreateFile:TIcmpCreateFile;
创建一个实例

@ICMPCreateFile := GetProcAddress(hICMPlib, 'IcmpCreateFile');
将所创建的实例指向具体的函数。

GetProcAddress原形:
FARPROC GetProcAddress(
HMODULE hModule, // DLL模块的句柄
LPCSTR lpProcName // 函数名
);

 
多人接受答案了。
 
后退
顶部