C++这个语法是如何工作的?

Arc*_*man 0 c++

我正在阅读一些源代码,我发现了一些看起来很古怪的代码.以下是已声明为已使用的单个函数的一个示例,并且此语法已被大量使用.

HINSTANCE hlib = LoadLibrary(L"ps3tmapi.dll");

//initial definition
typedef int(__cdecl *ProcessInfo)(int,UINT32, UINT32*, SNPS3PROCESSINFO*);

//some function created using what's above
ProcessInfo GetProcessInfo = (ProcessInfo)GetProcAddress(hlib, "SNPS3ProcessInfo");

//use of this function
GetProcessInfo(Target,ProcessID,buffsz,info);
Run Code Online (Sandbox Code Playgroud)

这绝不是有序的,只是来自源代码的片段.那么,这个语法到底是做什么的呢?我特意在第二条线上划过头来GetProcessInfo宣布.

为了清楚起见,我并不担心这段代码的含义(因为这里有很多东西在别处定义,所以你不知道它们是什么),我还没有看到这种语法.因此,如果有人能够解释它,那将非常感激.谢谢!

Jac*_*ack 5

typedef int(__cdecl *ProcessInfo)(int,UINT32, UINT32*, SNPS3PROCESSINFO*);
Run Code Online (Sandbox Code Playgroud)

这声明了一个名为ProcessInfo的类型,它表示一个返回int并接受4个参数的函数int, UINT32, UINT32*, SNPS3PROCESSINFO*.

现在GetProcAddress返回一个内存地址,它是内存中某个函数的地址.为了能够使用它,你必须将它转换为函数,这是第二行的目的

ProcessInfo GetProcessInfo = (ProcessInfo)GetProcAddress(hlib, "SNPS3ProcessInfo");
Run Code Online (Sandbox Code Playgroud)

声明一个名为变量的变量GetProcessInfo,该变量是签名的函数,ProcessInfo并返回由返回的地址的值GetProcAddress.

在此之后,您可以GetProcessInfo像使用一样使用

int GetProcessInfo(int,UINT32, UINT32*, SNPS3PROCESSINFO*);
Run Code Online (Sandbox Code Playgroud)

在您的代码中定义.