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

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

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;