2014-03-25 125 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