c++在file.h和file.cpp中编写回调函数
c++ Writing callback function in file.h and file.cpp
我需要编写一个回调函数,因为我将使用以下函数:
EnumChildWindows(windowHandle, EnumChildProc, 0);
其中第二个变量"EnumChildProc"需要是回调函数。
问题是在头文件和源文件中编写函数时遇到了困难。通常,当我编写布尔函数或任何其他类型时,我会首先以以下方式在标题中对其进行delcare:
bool myFunction(int var1);
如果前一个文件在.h文件中,我会在源文件中写以下代码:
bool file::myFunction (int var1)
{
///here would be my code
}
但通过回调函数,我尝试了以下操作,但没有成功:
在文件中。h:
BOOL CALLBACK EnumChildProc(HWND windowHandle, LPARAM lParam);
在文件.cpp:中
BOOL file::CALLBACK EnumChildProc(HWND windowHandle, LPARAM lParam)
{
///code goes here
}
它不起作用,因为我得到以下错误:
error: expected unqualified-id before '__attribute__'
错误指的是源代码中的以下行:
BOOL programLoop::CALLBACK EnumChildProc(HWND windowHandle, LPARAM lParam)
你知道我做错了什么吗?当我在头文件或源文件中声明回调函数时,我不知道我是否做错了什么。。。你们觉得怎么样?
EnumChildWindows的第二个参数被声明为WNDENUMPROC
,它被声明为
typedef BOOL (CALLBACK* WNDENUMPROC)(HWND, LPARAM);
所以你要声明你的回调函数为
BOOL CALLBACK myFunction (HWND w, LPARAM var1);
或
BOOL CALLBACK file::myFunction (HWND w, LPARAM var1);
作用域限定符::
始终位于作用域名称(在本例中为file
)和从属名称(myFunction
)之间
如果file
是一个名称空间,那么您已经设置好了;如果file
是一个类,请记住在该类中也声明myFunction static
。在某些情况下,您可能还需要extern
。
当您枚举子窗口时
HWND hwparent=/* handle of the window you want to enumerate */;
LPARAM var1=/* the value you want to pass in*/;
EnumChildWindows (hwParent, myFunction, var1);
Windows为每个窗口调用您的函数,传入w
参数,这样您就知道它是哪个窗口,var1
是您的参数。
至于where:不需要在头文件中声明myFunction
。很可能只有对EnumChildWindows
的调用使用myFunction
。它不会从任何其他文件调用。因此,只要myFunction
出现在.cpp文件中对EnumChildWindows
的调用之前,就可以了。
当然,如果file
是一个类,那么静态成员函数myFunction
必须在类声明中,该声明通常在某个头中。
使用该函数时,仅当调用该函数的位置不在file
(类或命名空间)作用域中时,才需要添加file::
。
如果file
是一个类,那么在定义myFunction时需要file::
,但如果在另一个类成员函数中调用EnumChildWindows
,则不需要file::
。
// .h file
class file
{
private:
HWND m_hwParent;
static HRESULT myFunction (HWND hw, LPARAM arg1);
public:
HRESULT OnAllChildWindows (LPARAM arg1);
// more stuff
};
// .cpp file
HRESULT file::myFunction (HWND hw, LPARAM arg1)
{
// whatever this does
}
HRESULT file::OnAllChildWindows (LPARAM arg1)
{
EnumChildWindows (m_hwParent, myFunction, arg1);
}
如果file
是一个命名空间,那么如果您将所有代码封装在一个命名空间块中,则不需要file::
:
namespace file {
HRESULT myFunction (HWND hw, LPARAM arg1)
{
// whatever this does
}
HRESULT OnAllChildWindows (HWND hwParent, LPARAM arg1)
{
EnumChildWindows (myFunction, arg1);
}
}
但如果你没有,或者是一个不同的范围:
HRESULT someting_else::OnAllChildWindows (HWND hwParent, LPARAM arg1)
{
EnumChildWindows (hwParent, file::myFunction, arg1);
}
- 将较大的整数写为二进制并读回它们会产生不好的结果
- 从文件中读取.txt字符串无法正确打印,但是当写回文件时,它很好
- 使用 select() 的请求/回复服务器。无法写回客户端
- 使用sokcet编程回写期间的数据丢失
- 我在不使用string.h的情况下写了一个C++回文.在没有 Do-While 循环的情况下,它可以正常工作.但是当我尝
- std::矢量写/回读会产生乱码
- IF流CSV从带逗号的文件写回
- 从文件中读取编号,递增并写回
- 写回全局变量
- C++ 读取 UTF-8 文件正常,转换为 UTF-16 正常,写回文件不正常
- OpenCL写回缓冲区
- 如何写回刚刚读取的csv文件(c++)
- c++filt可以用来将解映射的名称写回.s文件本身吗
- 如何阻止 fin "file pointer"重置回文件 c++ 的开头?
- 是否可以在内存中创建一个C FILE对象来读/写?
- 尝试在c++中使用函数对TXT文件进行排序并将其写回TXT文件
- 如何将JSON写回文件
- C++中的文件I/O-在写回数据时遇到一些问题
- 从cin读取两个字符串并将其写回时出现意外行为
- 读取CSV数据,并在某些列添加双引号,然后重新写回文件