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

时间:2017-06-21 19:05:29

标签: 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时,抛出异常时。

1 个答案:

答案 0 :(得分:0)

也许迟到了,但我认为问题在于调用回调的信息是每个线程。每次调用服务器时,服务器都会创建一个线程,并将绑定句柄链接到该线程。如果你添加的事实是你只能在客户端请求期间调用回调,那么你就不能在与客户端请求等待的线程不同的线程中调用回调。