2014-03-25 78 views
0

当我绑定将结构从RPC客户端传递到服务器时,出现错误。客户端调用Output3过程。通过Microsoft RPC传递结构

定义在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); 

什么可能是错误的?

+0

你得到的错误是什么?可以有很多... – rene

回答

0

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

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

+0

问题是在指针中,删除d和ddd后,evrything会很好。 MSDN描述了如何在函数中使用数组,但是如何为结构编写一致数组? – vico

+0

您可以将数组嵌入到结构中而不是指针中。无论如何,你将不得不添加一个长度字段。既然你的会员名字太匿名了,我不能说你是否已经有了像长度字段这样的东西。 – harper