我的服务器正在尝试从线程内调用RPC回调函数。在示例How To Use RPC Callback Functions 之后,稍微扩展这是我正在尝试做的事情
[ SAMPLE.IDL ]
[
uuid(9FEE4F51-0396-101A-AE4F-08002B2D0065),
version(1.0),
pointer_default( unique )
]
{
void RPCProc( [in, string] unsigned char *pszStr );
[callback] void CallbackProc([in,string] unsigned char *pszStr);
}
[ SAMPLEC.C (Client)]
void CallbackProc( unsigned char *pszString )
{
printf("Call from server, printed on client: %s", pszStr );
}
[ SAMPLES.C (Server)]
DWORD WINAPI thread(LPVOID lp)
{
CallbackProc(lp);
return 0;
}
void RPCProc( unsigned char *pszStr )
{
// WORKS
CallbackProc(pszStr);
// WORKS
thread(pszStr);
// Exception: 0x000006A6 binding handle invalid
HANDLE h = CreateThread(NULL, 0, thread, pszStr, 0, NULL);
WaitForSingleObject(h, INFINITE);
}
当从线程内调用CallbackProc时,抛出异常时。
答案 0 :(得分:0)
也许迟到了,但我认为问题在于调用回调的信息是每个线程。每次调用服务器时,服务器都会创建一个线程,并将绑定句柄链接到该线程。如果你添加的事实是你只能在客户端请求期间调用回调,那么你就不能在与客户端请求等待的线程不同的线程中调用回调。