我正在编写一个应用程序hat将在大多数表单上使用相同的表单默认值,所以我决定将WNDClASSEX宏并在需要时调用它:
#pragma once
#ifndef WNDCLASSEX_H
#define WNDCLASSEX_H
#include <windows.h>
//MAIN FORM / LOADER WNDCLASSEX
#define MainLoaderWnd(Size, WindowsProcess, hInstance, Title)\
{\
return new WNDCLASSEX{\
size,\
CS_DBLCLKS,\
WindowsProcess,\
0,\
0,\
hInstance,\
LoadIcon(NULL, IDI_APPLICATION),\
LoadCursor(NULL, IDC_ARROW),\
(HBRUSH)(COLOR_WINDOW),\
NULL,\
L(Title),\
LoadIcon(NULL, IDI_APPLICATION)\
};\
}
#endif
但是,当我将其添加到文件“loader.cpp”中时,我得到以下内容:
WNDCLASSEX wcex = MainLoaderWnd(sizeof(WNDCLASSEX), WndProc, hInstance, L"Your Text Here");
//Intellisense error: Expression Expected
想法/无法理解他的错误发生的原因。 :/
答案 0 :(得分:4)
预处理器宏不一个函数。预处理器在代码中看到MainLoaderWnd
被“调用”时所执行的操作是用宏体中的文本替换“调用”。这意味着您的作业将如下所示:
WNDCLASSEX wcex = { return new WNDCLASSEX{ ... }; }
这不是有效的作业。
相反,你可以创建一个inline
函数,它就像一个正确的函数,但编译器(不是预处理器)可能会将生成的代码内联放在调用的位置:< / p>
//MAIN FORM / LOADER WNDCLASSEX
inline PWNDCLASSEX MainLoaderWnd(size_t Size, WNDPROC WindowsProcess,
HINSTANCE hInstance, LPTSTR Title)
{
PWNDCLASSEX cls = new WNDCLASSEX;
// Set the fields
return cls;
}