我要在 CORBA 里面使用到结构体的数组,
IDL 文件的语法如下:
发现生成 CORBA 服务的时候不能导入生成,是后面
typedef 语句的数组问题,好像 DELPHI 里面不能处理,不知道大家
平时遇到类似问题如何处理的啊
struct ArrayType
{
string a;
string b;
};
typedef sequence<ArrayType> ArrayType_List;interface Account {
float balance(in ArrayType_List myArray);
};

解决方案 »

  1.   

    我用COM+,好像没法子传递结构类型的参数。
      

  2.   

    可以的呀,在我的delphi7里面生成的接口文件如下:
    <pre>
    <code><font  size=3 face="Courier New"><font color="#000000"><b>unit </b><font color="#0000FF">Account_i</font><font color="#800000">;</font><font color="#000080"><i>{This file was generated on 17 Jun 2003 12:44:22 GMT by version 03.03.03.C1.A2}
    {of the Inprise VisiBroker idl2pas CORBA IDL compiler.                        }{Please do not edit the contents of this file. You should instead edit and    }
    {recompile the original IDL which was located in the file                     }
    {F:\Temp\delphi\Corba\StructArray\Account.idl.                                }{Delphi Pascal unit      : Account_i                                          }
    {derived from IDL module : default                                            }</i></font><b>interfaceuses
      </b><font color="#0000FF">CORBA</font><font color="#800000">;</font><b>type
      </b><font color="#0000FF">ArrayType </font><font color="#800000">= </font><b>interface</b><font color="#800000">;
      </font><font color="#0000FF">Account </font><font color="#800000">= </font><b>interface</b><font color="#800000">;  </font><font color="#0000FF">ArrayType_List </font><font color="#800000">= </font><b>array of </b><font color="#0000FF">Account_i</font><font color="#800000">.</font><font color="#0000FF">ArrayType</font><font color="#800000">;  </font><font color="#0000FF">ArrayType </font><font color="#800000">= </font><b>interface
        </b><font color="#800000">[</font><font color="#FF0000">'{BBFC3BE2-07A5-F2FA-E52B-FE06600FA766}'</font><font color="#800000">]
        </font><b>function  </b><font color="#0000FF">_get_a </font><font color="#800000">: </font><font color="#0000FF">AnsiString</font><font color="#800000">;
        </font><b>procedure </b><font color="#0000FF">_set_a </font><font color="#800000">(</font><b>const </b><font color="#0000FF">a </font><font color="#800000">: </font><font color="#0000FF">AnsiString</font><font color="#800000">);
        </font><b>function  </b><font color="#0000FF">_get_b </font><font color="#800000">: </font><font color="#0000FF">AnsiString</font><font color="#800000">;
        </font><b>procedure </b><font color="#0000FF">_set_b </font><font color="#800000">(</font><b>const </b><font color="#0000FF">b </font><font color="#800000">: </font><font color="#0000FF">AnsiString</font><font color="#800000">);
        </font><b>property  </b><font color="#0000FF">a </font><font color="#800000">: </font><font color="#0000FF">AnsiString </font><b>read </b><font color="#0000FF">_get_a </font><b>write </b><font color="#0000FF">_set_a</font><font color="#800000">;
        </font><b>property  </b><font color="#0000FF">b </font><font color="#800000">: </font><font color="#0000FF">AnsiString </font><b>read </b><font color="#0000FF">_get_b </font><b>write </b><font color="#0000FF">_set_b</font><font color="#800000">;
      </font><b>end</b><font color="#800000">;  </font><font color="#0000FF">Account </font><font color="#800000">= </font><b>interface
        </b><font color="#800000">[</font><font color="#FF0000">'{F8AA2C8C-2DFD-7FD3-7AA2-F10304FB9EA3}'</font><font color="#800000">]
        </font><b>function  </b><font color="#0000FF">balance </font><font color="#800000">(</font><b>const </b><font color="#0000FF">myArray </font><font color="#800000">: </font><font color="#0000FF">Account_i</font><font color="#800000">.</font><font color="#0000FF">ArrayType_List</font><font color="#800000">): </font><font color="#0000FF">Single</font><font color="#800000">;
      </font><b>end</b><font color="#800000">;
    </font><b>implementation
    initialization
    end</b><font color="#800000">.
    </font></font>
    </code></pre>
      

  3.   

    unit Account_i;{This file was generated on 17 Jun 2003 12:44:22 GMT by version 03.03.03.C1.A2}
    {of the Inprise VisiBroker idl2pas CORBA IDL compiler.                        }{Please do not edit the contents of this file. You should instead edit and    }
    {recompile the original IDL which was located in the file                     }
    {F:\Temp\delphi\Corba\StructArray\Account.idl.                                }{Delphi Pascal unit      : Account_i                                          }
    {derived from IDL module : default                                            }interfaceuses
      CORBA;type
      ArrayType = interface;
      Account = interface;  ArrayType_List = array of Account_i.ArrayType;  ArrayType = interface
        ['{BBFC3BE2-07A5-F2FA-E52B-FE06600FA766}']
        function  _get_a : AnsiString;
        procedure _set_a (const a : AnsiString);
        function  _get_b : AnsiString;
        procedure _set_b (const b : AnsiString);
        property  a : AnsiString read _get_a write _set_a;
        property  b : AnsiString read _get_b write _set_b;
      end;  Account = interface
        ['{F8AA2C8C-2DFD-7FD3-7AA2-F10304FB9EA3}']
        function  balance (const myArray : Account_i.ArrayType_List): Single;
      end;
    implementation
    initialization
    end.