那么这个typedef语法实际上做了什么?
typedef PIMAGE_NT_HEADERS (WINAPI *CHECKSUMMAPPEDFILE)
(PVOID baseAddress, DWORD fileLength, PDWORD headerSum, PDWORD checkSum);
据我所知,typedef的使用方式与此typedef oldtype newtype类似; 但整个事情看起来像一个函数的原型,但它看起来也像是在创建一种新类型的PIMAGE_NT_HEADERS ......
正如有人回应"函数typedef"但函数typedef的一个例子可以再见
typedef int multiply(int arg1, int arg2);
其中multiply是函数名称,但在我上面发布的复杂函数名称中,函数名称在哪里?
答案 0 :(得分:2)
您的typedef
创建了别名CHECKSUMMAPPEDFILE
。 CHECKSUMMAPPEDFILE
是一个指向函数的指针,该函数返回PIMAGE_NT_HEADERS
并将其作为参数PVOID baseAddress, DWORD fileLength, PDWORD headerSum, PDWORD checkSum
。从第一次看这种typedef
的语法并不明显。
且WINAPI
为calling convention。
答案 1 :(得分:1)
这是函数指针的类型别名。您可以使用它来定义可以为其分配函数的变量。
此:
typedef int multiply(int arg1, int arg2);
是函数类型的typedef,不能像函数指针一样使用它。见下面的例子:
int mul(int arg1, int arg2) {
}
typedef int multiply(int arg1, int arg2);
int main() {
//multiply m = mul; // error multiply is a typedef for a funciton type
multiply* m = mul; // ok
}
您的类型别名:
typedef PIMAGE_NT_HEADERS (WINAPI *CHECKSUMMAPPEDFILE)(PVOID baseAddress,
DWORD fileLength, PDWORD headerSum, PDWORD checkSum);
做的:
它声明一个CHECKSUMMAPPEDFILE作为函数的指针(PVOID,DWORD,PDWORD,PDWORD),WINAPI调用约定返回PIMAGE_NT_HEADERS
您可以使用cdecl.org来设置decifer函数指针,它需要进行一些调整才能使其正常工作。