我的 C# 方法需要从 C++ 调用
最初我的 C# 方法采用 double[] 类型的参数,但是当从 C++ 调用时它变成了 SAFEARRAY
在 C++ 中,我需要从一个 double 组中获取数据,并填充一个 SAFEARRAY。我还没有找到任何示例代码来执行此操作。
感谢任何帮助
最佳答案
以下是在 C++ 中创建安全数组的代码。
#include<oaidl.h>
void CreateSafeArray(SAFEARRAY** saData)
{
double data[10]; // some sample data to write into the created safearray
SAFEARRAYBOUND Bound;
Bound.lLbound = 0;
Bound.cElements = 10;
*saData = SafeArrayCreate(VT_R8, 1, &Bound);
double HUGEP *pdFreq;
HRESULT hr = SafeArrayAccessData(*saData, (void HUGEP* FAR*)&pdFreq);
if (SUCCEEDED(hr))
{
// copy sample values from data[] to this safearray
for (DWORD i = 0; i < 10; i++)
{
*pdFreq++ = data[i];
}
SafeArrayUnaccessData(*saData);
}
}
像下面的代码一样完成后释放指针-
SAFEARRAY* saData;
CreateSafeArray(&saData); // Create the safe array
// use the safearray
...
...
// Call the SafeArrayDestroy to destroy the safearray
SafeArrayDestroy(saData);
saData = NULL; // set the pointer to NULL
如果您将 ATL 用于 C++,则最好使用在“atlsafe.h”中声明的 CComSafeArray。这是 SAFEARRAY 的包装器。 link text
关于c# - 如何在 C++ 中创建和初始化 double 的 SAFEARRAY 以传递给 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3730840/