[id(2), helpstring("method TransferData")] HRESULT TransferData([in]long
 len, [in, size_is(len)]byte *pData);接口是自定义的,如果直接传送单个的数值,没有任何问题
然后我添加了上述方法并给出了实现,没有任何错误或者警告
但是我用如下方式调用的时候,传送错误,仅仅传送了第一个数据,后面的都为空
          long len = 10;
          byte pData[10] = {'a','b','c','d','e','f','g','h','i','j'};
      hr = pOcr->TransferData(len, pData) ;
然后我调试了一把,发现传送到服务端的数据变成了
a,null,null,null......
这是为什么?不是说使用size_is属性可以指定数组大小吗?com组件是使用ATL建立的exe,调试环境VC6,WindowsXP2600

解决方案 »

  1.   

    对了,我在同一个接口下面还实现了其他的方法,例如
    [id(5), helpstring("trans")]
    HRESULT TransferFixLen([in]byte pData[10]);
    这个工作就正常了,
    但是令人崩溃的是,我如果将参数改成如下格式
    HRESULT TransferFixLen1([in, size_is(10)]byte pData[]);
    则出现和上面一样的错误,只传输第一个元素
      

  2.   

    正好可以帮上你的忙。其实我也遇到了类似的问题。size_is确实不好用,由于我也
    才接触COM不久。所以也不太清楚怎么会事(请高手指教),但我是使用了SAFEARRAY(安全数组)解决了该问题。你可以参考
    http://www.codeguru.com/activex/comarray_struct.shtml另请问你,你是如何调试的!!!