DWORD __stdcall threadProc(LPVOID lParam)的确不能是类成员函数,而且建议你在函数前加上static关键字,另外关掉增量编译。
WriteProcessMemory( processHwnd, allocMemo, &threadProc, 4096, NULL); 在&threadProc前面加上(LPVOID)强制类型转换就行了。

解决方案 »

  1.   

    网上搜了一下,我认为这种进程的注入方式实际上是显示的(或说是人工的)把一个自己程序内部的函数导入另外一个进程空间,所以这里也就不再需要用dll的方式了,但是具体的导入进程后的工作(比如说:怎样调用这个函数运行)是与原来的dll形式是一样的,所以在这里同样要求把这个函数写成跟dll内部导出函数一养的形式——回调函数形式。
    回调函数的在类中必须是STATIC成员函数或者是一个类外的全局函数。
    综上所述问题仅仅在于这个地址的问题,解决方法同意楼上。
      

  2.   

    谢谢zskof,skyair624,我早上起来的时候,又在网上看了一遍,也仔细看过了你们的解决方案,我把threadProc函数改为这样的声明:
    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谢谢大家帮忙
      

  3.   

    如二楼所说
    把这句改成
    WriteProcessMemory( processHwnd, allocMemo, (LPVOID)&threadProc, 4096, NULL); 
    另:
    threadProc需要是__stdcall的调用规范,不能是_cdecl,虽然和上面的编译错误无关。
      

  4.   


    我在类中开启新线程的时候一直是用的你上面所说的方法
    因为在类中如果是调用static函数,那么这个函数内部的用到的类中的变量似乎也要是static的,这里我记得不是太清楚了(你看下C++教程就明白了),所以我建议你直接用全局函数的方法,应该不会有类似的问题出现。