在RPC相关定义文件中正确定义函数

时间:2011-05-20 03:36:51

标签: visual-studio visual-c++ rpc exe

我想在RPC代码中定义一个新函数。我是新手,所以我只是复制函数Output并将其重命名为Output2。但是当我运行EXE时,总是调用Output函数,即使我真的调用了Output2。需要指南..

这是我在网上找到的代码。我认为它是某种存根文件..

以下是我正在使用的代码:

void Output( 
    /* [string][in] */ const char *szOutput)
{

    NdrClientCall2(
                  ( PMIDL_STUB_DESC  )&Example1_StubDesc,
                  (PFORMAT_STRING) &Example1__MIDL_ProcFormatString.Format[0],
                  ( unsigned char * )&szOutput);

}



void Output2( const char *test)    // <---- I added this definition
{

    NdrClientCall2(
                  ( PMIDL_STUB_DESC  )&Example1_StubDesc,
                  (PFORMAT_STRING) &Example1__MIDL_ProcFormatString.Format[0],
                  ( unsigned char * )&test);

}

1 个答案:

答案 0 :(得分:1)

this page上的图表可能有助于您了解以下说明。您所做的是创建第二个客户端存根,名为“Output2”新客户端存根调用与“输出”相同的服务器存根(因为它将相同的值传递给参数1和2) NdrClientCall2)所以服务器存根最终调用相同的服务器应用程序函数。

假设您的RPC应用程序构造合理,则不应编辑包含NdrClientCall2调用的文件。客户端存根文件通常由MIDL编译器生成。您需要找到应用程序的IDL文件(可能还有相关的ACF文件),并为您的IDL添加Output2的定义。然后,当您重建客户端项目时,MIDL编译器应编译新修改的IDL文件(如果需要,还应编译ACF文件)并生成新的客户端存根。

类似地,当您编译服务器项目(使用相同的IDL)时,MIDL编译器将生成新的服务器存根文件。根据服务器应用程序的编写方式,您可能需要编辑服务器存根文件,以将存根连接到函数的实际实现。

有些文章here可能会有用,但如果您不了解RPC的工作方式,那么您可能会咬得更多,而不是咀嚼。