近日用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#中返回一个不定长数组。谢谢赐教,如获解决,另开贴送分。
参考一无源代码的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#中返回一个不定长数组。谢谢赐教,如获解决,另开贴送分。
解决方案 »
- vc++编程问题
- colevariant出问题了
- 用opencv或者其他方法,能够快速确定一幅图片是不是全黑的
- 怎么把一个动画嵌入到一个窗口的客户区
- 怎样用vc 后台模拟 按住键盘的某个键..
- VC中如何在combo控件中增加和删除项
- Windows启动后,fopen创建文件失败
- 关于重写CButton类的问题, 谢谢.
- 如何生成能够在没有装vc的机子上使用的可执行程序?? 我等你的回答
- 请问!如何对一文本文件一次一行的读出!!!
- 利用MFC实现的ACTIVEX如何实现IPersistStorage接口,请教。
- WORD文档中ACtivex持久化问题--添加ACtivex对应数据流 指定 ISTREAM的名称
如改成{ 5,0}则正常,现在的问题是如何定义接口,使得其参数可为const VARINAT &,且在c#中生成如public virtual bool GetBufferData(int bufferStart, int count, object returnedData)
public virtual object GetBufferDataEx(int bufferStart, int count)
的两个函数?