通过Microsoft RPC传递结构

时间:2014-03-25 13:59:10

标签: visual-studio-2010 visual-c++ rpc midl

我在将结构从RPC客户端传递到服务器时遇到错误。客户端调用Output3过程。

IDL中的定义:

struct BarStruct
{
  byte a;
  int b;
  byte c;
  char* d;
  char* ddd;
};

void Output3([in] handle_t hBinding, [in, out] struct BarStruct* b);

在标题中生成:

struct BarStruct
    {
    byte a;
    int b;
    byte c;
    char *d;
    char *ddd;
    } ;

void Output3( 
    /* [in] */ handle_t hBinding,
    /* [out][in] */ struct BarStruct *b);

服务器端的实现:

void Output3(handle_t hBinding, struct BarStruct * b)
{
    std::cout << "a=" << b->a << std::endl;
}

客户端代码:

  BarStruct b;
  b.a=10;

  std::cout<<"Output3"<<std::endl ;
  Output3(hBinding, &b);

可能出现什么问题?

1 个答案:

答案 0 :(得分:0)

您的结构包含指向某事物的指针,在特定情况下指向char的指针。当你想将它转移到另一个进程时,你必须记住指针只是和地址值。当你想传递指针所指向的数据时,你需要一些不同的东西,比如conformant array

基本思想是你必须通过指针传递地址数组的长度。