1. 开发进程外组件程序时,应注册Proxy / Stub, 因为跨进程创建、访问Com对象需要列集
2. 可以给Com接口传递数组,例如
[helpstring("方法Sum")] HRESULT Sum([in] LONG* pArray, [in] LONG len, [out,retval] LONG* pRet);
若此接口为进程内调用接口,可以正常工作,若是进程外组件,则工作不会正常,因为Com列集不知道pArray数组的长度是多少,可以在接口定义上加上数组长度
[helpstring("方法Sum")] HRESULT Sum([in,size_is(len)] LONG* pArray, [in] LONG len, [out,retval] LONG* pRet);
这样的话则工作正常,推荐。
3. 若接口[helpstring("方法Sum")] HRESULT Sum([in,size_is(len)] LONG* pArray, [in] LONG len, [out,retval] LONG* pRet);供C#使用,则Com包装器会生成此签名方法
public virtual int Sum(ref int pArray, int len);
客户端可以这样调用方法:
int[] pArray = new int[10];
for (int i = 0; i < 10; i++)
{
pArray[i] = i + 1;
}
sum = tool.Sum(ref pArray[0], 10);
工作正常