繁体   English   中英

这些宏和typedef做什么? 如何将其扩展为成员函数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM