函数指针基本问题
Function Pointer basic question
我有一个关于函数指针的基本问题。在下面的代码片段中,我如何阅读这个?*(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;
}
这不是关于函数指针的,而是关于一般类型转换的。
假设pfn
的类型为T
。则&pfn
为T*
型。它通过强制转换表达式(括号中的内容)被强制转换为FARPROC*
。最后,它被解引用,得到一个FARPROC&
。
所有这些都意味着你将pfn
视为FARPROC
类型并为其赋值。
下面是一个通用的例子:
S make_an_S();
T x;
T * const px = &x;
S * const py = (S*)px;
*py = make_an_S(); // same as *(S*)&x = make_an_S();
*(FARPROC*)&pfn = GetProcAddress(h, szFn);
等价于
(FARPROC)pfn = GetProcAddress(h, szFn);
所以,pfn
是一个函数指针,它被类型转换为FARPROC
来存储从GetProcAddress(h, szFn)
接收到的地址。
[注:我不确定,如果这种类型转换在c++中是不赞成的。]
相关文章:
- 关于 c++ 函数中指针赋值的简单问题
- 链表指针问题
- C++ 关于指针取消引用的技术问题
- C++中的指针和常量问题不大
- 包含矢量指针的结构的内存释放问题
- 指针问题:从不兼容的类型"int"分配给"int *"
- 将字节数组转换为带有字节序问题的指针
- 关于如何使用指向主窗口的指针的 QT 问题
- 当成员值从指针更改为非指针时,C++常量问题
- 为什么循环会导致指针出现问题?
- 使用指针计算堆栈问题的大 O 表示法
- 构造函数 (C++) 中的 char 指针参数存在问题
- 指向包含对齐 C 结构C++类的 C 指针的对齐问题
- 涉及指针和手动实现的矩阵类的问题
- 从基指针到派生的强制转换问题
- 迭代器的指针操作问题
- 64 位迁移问题:指针更改
- C++模板使用问题指针
- 跳到C++第13章练习问题4-指针
- 用std::pair数组初始化std::map问题(指针错误?)