函数指针基本问题

发布于 2024-11-28 08:40:14 字数 433 浏览 0 评论 0原文

我有一个关于函数指针的基本问题。 在下面的代码片段中,我如何阅读这个“ *(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不语却知心 2024-12-05 08:40:14

这实际上并不是关于函数指针,而是关于一般的转换。

假设 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();

This isn't really about function pointers, but about casting in general.

Suppose pfn is of type T. Then &pfn is of type T*. This gets cast to FARPROC* by the cast expression (the stuff in the parentheses). Finally, this gets dereferenced, yielding a FARPROC&.

All in all this just means you're treating pfn as if it were of type FARPROC and assign a value to it.

Here's a generic example:

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();
GRAY°灰色天空 2024-12-05 08:40:14
*(FARPROC*)&pfn = GetProcAddress(h, szFn);

相当于,

(FARPROC)pfn = GetProcAddress(h, szFn);

所以,pfn 是一个函数指针,它被类型转换为 FARPROC 以存储从 GetProcAddress(h, szFn) 接收到的地址。

[注意:我不确定 C++ 中是否已弃用这种类型转换。]

*(FARPROC*)&pfn = GetProcAddress(h, szFn);

is equivalent to,

(FARPROC)pfn = GetProcAddress(h, szFn);

So, pfn is a function pointer which is type casted to FARPROC to store the address received from GetProcAddress(h, szFn).

[Note: I am not sure, if this kind of typecasting is deprecated in C++.]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文