Scorp__), я не компилировал именно этот код. Скажу более, именно ТАК я никогда не использовал. Поэтому пример скорее всего неудачный. Скажу только как я CBF использовал. Передача ф-ции в CreateThread
WINBASEAPI HANDLE WINAPI CreateThread ( IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN SIZE_T dwStackSize,
IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId )
где
typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE
где
typedef VOID WINAPI* PFIBER_START_ROUTINE ( LPVOID lpFiberParameter )
вот так выглядит в коде:
DWORD dwThread;
try
{
HANDLE hThread = CreateThread(NULL, 0,
RunThread, NULL, 0, &dwThread);
а вот так я определяю саму RunThread
DWORD WINAPI RunThread(LPVOID lpParameter);
Другой пример, ща более точно глянул в MSDN для MFC СListCtrl, вчера писал по памяти.
BOOL SortItems (PFNLVCOMPARE pfnCompare, DWORD_PTR dwData)
где
typedef int CALLBACK* PFNLVCOMPARE (LPARAM, LPARAM, LPARAM)
реализация
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
Вот пример из MSDN как она используется:
Example
// Sort the item in reverse alphabetical order.
static int CALLBACK
MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// lParamSort contains a pointer to the list view control.
// The lParam of an item is just its index.
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(lParam1, 0);
CString strItem2 = pListCtrl->GetItemText(lParam2, 0);
return strcmp(strItem2, strItem1);
}
void snip_CListCtrl_SortItems()
{
// The pointer to my list view control.
extern CListCtrl* pmyListCtrl;
// Sort the list view items using my callback procedure.
pmyListCtrl->SortItems(MyCompareProc, (LPARAM) pmyListCtrl);
}
Ну а сохранение указателей на ф-ю использую сплошь и рядом, когда загружаю dll динамически и получаю из них ф-ции.
Пример:
m_pfGetPortDllInfo = (GETPORTDLLINFOPROC)GetProcAddress(hinstLib, "GetPortDllInfoA");
где
class CPortDll
{
...
private:
INITPORTPROC m_pfInitPortDll;
GETPORTDLLINFOPROC m_pfGetPortDllInfo;
HASDLLPORTPROC m_pfHasDllPort;
};
типы определены как
typedef CPort* (*INITPORTPROC)(int,char*);
typedef BOOL (*GETPORTDLLINFOPROC)(LPPORTDLLINFO);
typedef BOOL (*HASDLLPORTPROC)(int);
Ну и тд Может насчёт сигнатуры ты и прав. Но это работает, в смысле - должно работать
. У меня ща тоже не очень со временем. Ты на какой системе работаешь? Вечерком могу глянуть для моей. В смысле примерчик сделаю, чтоб компилился.