[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
[id(5), helpstring("trans")]
HRESULT TransferFixLen([in]byte pData[10]);
这个工作就正常了,
但是令人崩溃的是,我如果将参数改成如下格式
HRESULT TransferFixLen1([in, size_is(10)]byte pData[]);
则出现和上面一样的错误,只传输第一个元素
才接触COM不久。所以也不太清楚怎么会事(请高手指教),但我是使用了SAFEARRAY(安全数组)解决了该问题。你可以参考
http://www.codeguru.com/activex/comarray_struct.shtml另请问你,你是如何调试的!!!