DWORD __stdcall threadProc(LPVOID lParam)的确不能是类成员函数,而且建议你在函数前加上static关键字,另外关掉增量编译。
WriteProcessMemory( processHwnd, allocMemo, &threadProc, 4096, NULL); 在&threadProc前面加上(LPVOID)强制类型转换就行了。
WriteProcessMemory( processHwnd, allocMemo, &threadProc, 4096, NULL); 在&threadProc前面加上(LPVOID)强制类型转换就行了。
回调函数的在类中必须是STATIC成员函数或者是一个类外的全局函数。
综上所述问题仅仅在于这个地址的问题,解决方法同意楼上。
static void threadProc(LPVOID lParam)但是还会提示出这样的错误:
AskTaoPPDlg.obj : error LNK2001: unresolved external symbol "public: static void __cdecl CAskTaoPPDlg::threadProc(void *)" (?threadProc@CAskTaoPPDlg@@SAXPAX@Z)
Debug/AskTaoPP.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.AskTaoPP.exe - 2 error(s), 0 warning(s)我实在是搞不明白了,还请大家稍微仔细些回答,或者帮忙写下一段.我在网上看到他们都是这样声明的函数:
DWORD __stdcall threadProc(LPVOID lParam)
from: http://blog.csdn.net/vcforever/archive/2005/03/15/319872.aspx谢谢大家帮忙
把这句改成
WriteProcessMemory( processHwnd, allocMemo, (LPVOID)&threadProc, 4096, NULL);
另:
threadProc需要是__stdcall的调用规范,不能是_cdecl,虽然和上面的编译错误无关。
我在类中开启新线程的时候一直是用的你上面所说的方法
因为在类中如果是调用static函数,那么这个函数内部的用到的类中的变量似乎也要是static的,这里我记得不是太清楚了(你看下C++教程就明白了),所以我建议你直接用全局函数的方法,应该不会有类似的问题出现。