C#:从C ++ COM中读取包装在Variant中的SafeArray

时间:2017-09-04 07:19:51

标签: c# com safearray

我正在努力在C#中使用COM-Object。我引用了dll,我可以调用所有返回基本数据类型的函数。但是,返回较大数据对象的一个​​函数总是抛出SEHException。 该功能定义如下:

  

GetData(long bTime,long lFirstIndex,long lLastIndex,VARIANT * pBuffer,long * nValuesRead)

pBuffer是双打的安全阵容。

我尝试了一些方法,如:

double[] ar = new double[nSample];
object buffer = (object) ar;

Array ar = Array.CreateInstance(typeof(double), nSample);
object buffer = (object) ar;

以及

object buffer = null;

所有这些编译,但也抛出异常。

m4.GetData(0, idxFirst, idxLast, out buffer, out nSampleRead); 

但是,我有一个正在运行的C ++ - 示例,因此COM-Lib应该能够正常运行。

CComSafeArray<double> *pData;
CComSafeArrayBound bound;
bound.SetCount(nValues); // nValues has been claculated above
bound.SetLowerBound(0);
pData = new CComSafeArray<double>(&bound,1); 
// Wrap safearrays by a VARIANT
VARIANT vData;
vData.parray = *pData->GetSafeArrayPtr();
vData.vt = VT_ARRAY;
pData->Detach();
// Get the data form the signal
m4.GetData(FALSE, idx1, idx2, &vData, &n);

我只是无法将其转换为C#。所以我非常感谢,如果有人能给我一个提示,那该怎么做。

0 个答案:

没有答案