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

C++ How does this Syntax Work?

本文关键字:工作 何工作 语法 C++      更新时间:2023-10-16

我正在阅读一些源代码,发现了一些看起来很古怪的代码。下面是一个被声明为used的单个函数的例子,这种语法已经被使用了很多次。

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);

这绝不是按顺序排列的,只是源代码中的片段。那么,这个语法到底在做什么呢?我特别为声明GetProcessInfo的第二行挠头。

为了清楚起见,我并不担心这段代码的含义(因为这里的多个东西在其他地方定义,所以你不知道它们是什么),我只是还没有看到这种语法。因此,如果有人能解释一下,那将不胜感激。谢谢

typedef int(__cdecl *ProcessInfo)(int,UINT32, UINT32*, SNPS3PROCESSINFO*);

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

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

ProcessInfo GetProcessInfo = (ProcessInfo)GetProcAddress(hlib, "SNPS3ProcessInfo");

声明一个名为GetProcessInfo的变量,该变量是签名ProcessInfo的函数,具有GetProcAddress返回的地址值。

在这之后,你可以使用GetProcessInfo,就像你有一样

int GetProcessInfo(int,UINT32, UINT32*, SNPS3PROCESSINFO*);

在代码中定义。

示例演示了如何加载dll并调用其中一个导出函数。

导出函数的签名在以下语法中设置。

typedef int(__cdecl *ProcessInfo)(int,UINT32, UINT32*, SNPS3PROCESSINFO*);

以下语法指示运行时使用"LoadLibrary"调用加载的dll,并获取指向导出函数"SNPS3ProcessInfo"的指针,并将其分配给"GEtProcessInfo"

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