代码之家  ›  专栏  ›  技术社区  ›  vico

通过Microsoft RPC传递结构

  •  0
  • vico  · 技术社区  · 10 年前

    我在绑定从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 回复  |  直到 10 年前
        1
  •  0
  •   harper    10 年前

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

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