函数指针基本问题
我有一个关于函数指针的基本问题。 在下面的代码片段中,我如何阅读这个“ *(FARPROC*)&pfn =
"?
IFastString *CallCreateFastString(const char *psz) {
static IFastString * (*pfn)(const char *) = 0;
if (!pfn) {
const TCHAR szDll[] = _TEXT("FastString.DLL");
const char szFn[] = "CreateFastString";
HINSTANCE h = LoadLibrary(szDll);
if (h)
*(FARPROC*)&pfn = GetProcAddress(h, szFn);
}
return pfn ? pfn(psz) : 0;
}
I have a basic question on function pointer.
In the below code snippet, how do I read this "*(FARPROC*)&pfn =
"?
IFastString *CallCreateFastString(const char *psz) {
static IFastString * (*pfn)(const char *) = 0;
if (!pfn) {
const TCHAR szDll[] = _TEXT("FastString.DLL");
const char szFn[] = "CreateFastString";
HINSTANCE h = LoadLibrary(szDll);
if (h)
*(FARPROC*)&pfn = GetProcAddress(h, szFn);
}
return pfn ? pfn(psz) : 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这实际上并不是关于函数指针,而是关于一般的转换。
假设
pfn
的类型为T
。那么&pfn
的类型为T*
。它通过强制转换表达式(括号中的内容)强制转换为 FARPROC*。最后,它被取消引用,产生一个FARPROC&
。总而言之,这意味着您将
pfn
视为FARPROC
类型,并为其赋值。这是一个通用示例:
This isn't really about function pointers, but about casting in general.
Suppose
pfn
is of typeT
. Then&pfn
is of typeT*
. This gets cast toFARPROC*
by the cast expression (the stuff in the parentheses). Finally, this gets dereferenced, yielding aFARPROC&
.All in all this just means you're treating
pfn
as if it were of typeFARPROC
and assign a value to it.Here's a generic example:
相当于,
所以,
pfn
是一个函数指针,它被类型转换为FARPROC
以存储从GetProcAddress(h, szFn)
接收到的地址。[注意:我不确定 C++ 中是否已弃用这种类型转换。]
is equivalent to,
So,
pfn
is a function pointer which is type casted toFARPROC
to store the address received fromGetProcAddress(h, szFn)
.[Note: I am not sure, if this kind of typecasting is deprecated in C++.]