我正在阅读一些源代码,我发现了一些看起来很古怪的代码.以下是已声明为已使用的单个函数的一个示例,并且此语法已被大量使用.
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宣布.
为了清楚起见,我并不担心这段代码的含义(因为这里有很多东西在别处定义,所以你不知道它们是什么),我还没有看到这种语法.因此,如果有人能够解释它,那将非常感激.谢谢!
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)
在您的代码中定义.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |