我正在努力在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#。所以我非常感谢,如果有人能给我一个提示,那该怎么做。