c - 如何从 Microsoft RPC Server 调用线程中的回调函数

标签 c multithreading winapi rpc

我的服务器正在尝试从线程内调用 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/

相关文章:

c - pthread_rwlock_rdlock() 和 pthread_rwlock_wrlock()

c - 如何测试 C 函数的性能?

用 C 计算文件中的数字

c++ - 将 Powershell.exe 的输入和输出重定向到 C++ 中的管道

c - (后缀,前缀)和解引用运算符的优先级

c - C 线程间传递消息

python - 3秒后如何创建线程拍照?

java - 如何在方法和线程之间共享字符串?

winapi - 我是否必须关闭子进程以后拥有的继承句柄?

c++ - IDC 是什么意思?