读书人

那位大神能帮小弟我看看这个异常该如何

发布时间: 2013-02-24 17:58:56 作者: rapoo

那位大神能帮我看看这个错误该怎么解决?
我定义的代码是这样的


DWORD NewEntry()
{
DWORD (__stdcall *startAddr)(LPVOID); // eax@1
HANDLE hThread; // eax@2
DWORD dwThreadID; // [sp+0h] [bp-8h]@1


LoadLibrary(L"advapi32.dll");

startAddr = (DWORD (__stdcall *)(LPVOID))GetShellCode();

if ( startAddr )
{
hThread = CreateThread(NULL, 0x100000u, startAddr, 0, 0, &dwThreadID);

startAddr = (DWORD (__stdcall *)(LPVOID))WaitForSingleObject(hThread, INFINITE);
}

return startAddr;
}

调试时出现错误:错误1 error C2440: “return”: 无法从“DWORD (__stdcall *)(LPVOID)”转换为“DWORD”,哪位大神能告诉我该怎么解决吗?
[解决办法]
这个是基础啦!
DWORD (__stdcall *startAddr)(LPVOID)
表示startAddr 是一个指向 返回值为DWORD ,参数为LPVOID类型的函数指针变量

(DWORD (__stdcall *)(LPVOID)) 这一句是一个函数指针的类型



void f(int a)
{
printf("this-%d\n",a);
}

void f1(char a)
{
printf("11");
}
int main()
{
void (* p)(int);
p = f;
//p = void(*)(char)f;
p(1);
}
结果:
this- 1;

读书人网 >C++

热点推荐