近日用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#中返回一个不定长数组。谢谢赐教,如获解决,另开贴送分。