描述:
近日用VC atl com编写一文件存储模块,需输入、输出大量字节流。
参考一无源代码的ocx控件,其在vc IDE中生成如下接口:
BOOL CDAQAI::GetBufferData(long BufferStart, long count, const VARIANT& ReturnedData)
而在C# IDE中,则出现下面两个接口:
public virtual bool GetBufferData(int bufferStart, int count, object returnedData)
public virtual object GetBufferDataEx(int bufferStart, int count)
其中后者返回一个类型为System.Single[]的数组。
我因初学COM,不知如何定义“引用类型参数”的接口函数,如用IDE直接加入引用类型参数的接口,则编译报错。
尝试写出如下接口函数:
interface Itt : IDispatch
{
[id(1), helpstring("method test")] HRESULT test([in] VARIANT v1,[out] VARIANT * v2);
};
STDMETHODIMP Ctt::test(VARIANT v1, VARIANT *pArray)
{
// TODO: Add your implementation code here
short ArrayBack[5];
short Temp;
int i=0;
SAFEARRAY* psa;//定义数组描述符
SAFEARRAYBOUND bound[1] = { 5,1 }; //一维数组
psa = SafeArrayCreate ( VT_I2, 1, bound );//创建数组
_ASSERTE ( psa != NULL );
for( i=0;i<5;i++){
Temp = ArrayBack[i];
SafeArrayPutElement(psa,(long*)&i,&Temp);
}
pArray->vt = VT_ARRAY | VT_I2;//VARIANT类型定义,
pArray->parray = psa; //数组传入返回值
return S_OK;
}
则无论创建整形、字节型的SAFEARRAY,在C#均中得到一个实际类型为 System.Single[*] 的 Object,无法直接转换为数组。
请问如何定义及实现接口,方可在VC 及 C#中返回一个不定长数组。谢谢赐教,如获解决,另开贴送分。