如何使用
我正在尝试以下方式,但当尝试填充 safearray 时, 类数组的引用以 NULL 的形式传递到托管代码。
在托管世界中,我有类似以下的代码:
请注意,我可以使用
Safearray
将自定义类型的数组(仅包含属性的类)从 C++ 传递到 C#?使用 VT_RECORD
类型是否是正确的方法?我正在尝试以下方式,但当尝试填充 safearray 时,
SafeArrayPutElement
返回错误在托管世界中,我有类似以下的代码:
[ComVisible(true)]
public interface IStatistics
{
double Mean { get; set; }
double StdDev { get; set; }
}
[Serializable]
[ComVisible(true)]
public class Statistics : IStatistics
{
public Mean { get; set; }
public double StdDev { get; set; }
}
非托管世界:
HRESULT hr = CoInitialize(NULL);
...
SAFEARRAY *pEquationsStatistics;
// common dimensions for all arrays
SAFEARRAYBOUND dimensions[1];
dimensions[0].cElements = 2;
dimensions[0].lLbound = 0;
pEquationsStatistics = SafeArrayCreate(VT_RECORD, 1, dimensions);
...
for (long i = 0; i < dimensions[0].cElements; i++)
{
long indices[1];
indices[0] = 0;
...
// Equation statistics
IStatisticsPtr pIStatistics(__uuidof(Statistics));
pIStatistics->PutMean(1.0); // so far so good
result = SafeArrayPutElement(pEquationsStatistics, indices, pIStatistics);
...
indices[0]++;
}
请注意,我可以使用
SafeArray
来传递其他BSTR
数组,这两个应用程序之间没有问题。因此,这是传递结构的特殊情况。