The information in this article applies to:
SUMMARY
Many of the Win32 application programming interfaces (APIs) call for a
callback routine. One example is the lpStartAddr argument of
CreateThread():
fdwCreate, lpIDThread)
When attempting to use a member function as the thread function, the following error is generated:
The problem is that the function expects a C-style callback, not a pointer to a member function. A major difference is that member functions are called with a hidden argument called the "this" pointer. In addition, the format of the pointer isn't simply the address of the first machine instruction, as a C pointer is. This is particularly true for virtual functions. If you want to use a member function as a callback, you can use a static member function. Static member functions do not receive the "this" pointer and their addresses correspond to an instruction to execute. Static member functions can only access static data, and therefore to access nonstatic class members, the function needs an object or a pointer to an object. One solution is to pass in the "this" pointer as an argument to the member function. MORE INFORMATION
This situation occurs with callback functions of other types as well, such
as:
For more information on C++ callbacks, please see the May 1993 issue of the "Windows Tech Journal." The following sample demonstrates how to use a static member function as a thread function, and pass in the "this" pointer as an argument. Sample Code
class A { public:
};
{
0, (LPTHREAD_START_ROUTINE)(a.StartRoutine), &a, // Pass "this" pointer to static member fn 0, &dwThreadID
}
Additional query words: 3.10 3.50 4.00
Keywords : |
Last Reviewed: September 21, 1999 © 2000 Microsoft Corporation. All rights reserved. Terms of Use. |