如何创建和初始化C ++双打SAFEARRAY传递给C# [英] How to create and initialize SAFEARRAY of doubles in C++ to pass to C#
问题描述
我的C#方法必须从C调用++
本来我的C#方法接受类型的参数双重[],但是从C调用++时就变成了SAFEARRAY
在C ++中我需要从双打的数组获取数据,并填充一个SAFEARRAY。我还没有发现任何样本代码来做到这一点。
任何帮助表示赞赏。
以下是创建C ++中的SAFEARRAY代码
#包括< OAIDL.H>
无效CreateSafeArray(SAFEARRAY ** saData)
{
双数据[10]; //写进去绑定创建SAFEARRAY
SAFEARRAYBOUND一些样本数据;
Bound.lLbound = 0;
Bound.cElements = 10;
* saData = SafeArrayCreate(VT_R8,1,&安培;行);
双HUGEP * pdFreq;
HRESULT HR = SafeArrayAccessData(* saData,(无效HUGEP * FAR *)及pdFreq);
如果(成功(小时))
{
//从数据[]复制采样值到这个SAFEARRAY
表示(DWORD I = 0; I&小于10;我+ +)
{
* pdFreq ++ =数据[I]
}
SafeArrayUnaccessData(* saData);
}
}
释放指针,当你完成类似下面的代码 -
SAFEARRAY * saData;
CreateSafeArray(安培; saData); //创建安全数组
//使用SAFEARRAY
...
...
//调用SafeArrayDestroy摧毁SAFEARRAY
SafeArrayDestroy(saData);
saData = NULL; //设置指针为NULL
如果您使用ATL为C ++中声明则更好地利用CComSafeArray atlsafe.h。这是为SAFEARRAY包装。 链接文本
My C# method needs to be invoked from C++
Originally my C# method takes a parameter of type double[], but when calling from C++ it becomes a SAFEARRAY
In C++ I need to take data from an array of doubles, and populate a SAFEARRAY. I have not found any sample code to do this.
Any help is appreciated
Following is the code to create a safearray in 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);
}
}
Free the pointer when you are finished like the following code-
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
If you use ATL for C++, then better use CComSafeArray declared in "atlsafe.h". This is wrapper for SAFEARRAY. link text
这篇关于如何创建和初始化C ++双打SAFEARRAY传递给C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!