我的服务器正在尝试从线程内调用 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 时,就会抛出异常。
最佳答案
也许晚了,但我认为问题在于调用回调的信息是每个线程的。每次调用服务器时,服务器都会创建一个线程并将绑定(bind)句柄链接到该线程。如果您添加只能在客户端请求期间调用回调的事实,那么您不能在与等待客户端请求的线程不同的线程中调用回调是合理的。
关于c - 如何从 Microsoft RPC Server 调用线程中的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44684326/