[英]What do these macros and typedefs do? How to expand it to member functions?
我试图理解这段代码并对其进行扩展。 我已经添加了一些有关我认为的功能的评论,但有人可以澄清。 一个是动态链接库,另一个是可执行文件。 它们是分别编译的。
在DLL的头文件中:
#define INITIALIZE_WINDOW(name) void name()
// ^ Macro replacing all instances of INITIALIZE_WINDOW
typedef INITIALIZE_WINDOW(initialize_window);
// ^ Equivalent to typedef void initialize_window();
// ^ What's the purpose of this statement? Is it to let the executable know about its existence?
在DLL的源文件中:
INITIALIZE_WINDOW(InitializeWindow) { /* Do stuff */ }
// ^ Equivalent to void InitializeWindow();
// ^ GetProcAddress() gets an address to this function
在可执行文件的源文件中:
initialize_window* initializeWindow = (initialize_window*)GetProcAddress(dllHandle, "InitializeWindow");
// ^ Retrieve the address of InitializeWindow() but cast it as an initialize_window pointer?
// ^ Equivalent to void (*initializeWindow)() = (initialize_window*)GetProcAddress(...); Is this correct?
最终在此扩展。 我将如何宏成员函数并对其使用GetProcAddress()?
这是一个函数typedef。
typedef void initialize_window()
使initialize_window
成为类型void()
的别名,该类型是不带参数(在C ++中)或采用未指定但常数的参数(在C中)并返回void
的函数类型。
因此initialize_window*
是指向void()
的指针,即void(*)()
,即函数指针。
宏的目标是强制使用正确的类型。
您做了正确的替换:
typedef INITIALIZE_WINDOW(initialize_window);
相当于
using initialize_window = void (); // function taking nothing returning void
因此initialize_window*
是函数指针( void(*)()
)。
函数InitializeWindow的定义:
void InitializeWindow() {/**/}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.