我有原型的功能
DWORD WINAPI blah(LPVOID arg);
这意味着与 CreateThread 一起用于线程应用程序。
我用 CreateThread 调用它没有问题。但是在代码的其他地方,我通常称之为blah(NULL)。当它到达这部分时,它会崩溃。这是因为 WINAPI 部分使它成为 __stdcall 并且您不能像那样调用 __stdcall 函数吗?
我有原型的功能
DWORD WINAPI blah(LPVOID arg);
这意味着与 CreateThread 一起用于线程应用程序。
我用 CreateThread 调用它没有问题。但是在代码的其他地方,我通常称之为blah(NULL)。当它到达这部分时,它会崩溃。这是因为 WINAPI 部分使它成为 __stdcall 并且您不能像那样调用 __stdcall 函数吗?
不是因为__stdcall
。在调试器中启动您的程序并检查哪一行代码导致您崩溃。
唯一的问题是,如果blah()
专门调用TerminateThread(
self)
来结束,而不是仅仅从底部返回。该CreateThread
调用设置返回地址,以便当 blah() 返回时,它调用TerminateThread
.
如果blah()没有任何类似的代码,则需要检查代码以查看它是否以某种方式执行了特定于线程的某些操作,从而使其失败。顺便说一句,我想不出其他任何东西(除了 TerminateThread() 之外)可能导致编写的代码成为一个线程,从而阻止它被直接调用。