Chr*_*ris 11 c# c++ safearray visual-c++
我需要从C++调用我的C#方法
最初我的C#方法接受double []类型的参数,但是当从C++调用时它变成了SAFEARRAY
在C++中,我需要从双精度数组中获取数据,并填充SAFEARRAY.我没有找到任何示例代码来执行此操作.
任何帮助表示赞赏
Lit*_*ton 26
以下是在C++中创建safearray的代码.
#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);
}
}
Run Code Online (Sandbox Code Playgroud)
完成时释放指针,如下面的代码 -
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
Run Code Online (Sandbox Code Playgroud)
如果你使用ATL for C++,那么最好使用"atlsafe.h"中声明的CComSafeArray.这是SAFEARRAY的包装.链接文字
继续@Liton的回答,我想强调他的最后一句话,即ATL的CComSafeArray.它真的可以为你节省很多打字.CComSafeArray有C++构造函数,析构函数,运算符重载,包括一个[],它给你一个读/写引用的任何元素SAFEARRAY.简而言之,您可以真正专注于您的业务逻辑,而无需担心SAFEARRAY管道:
#include <atlbase.h>
#include <atlsafe.h>
// ...
CComSafeArray<double> arr(10);
arr[0] = 2.0;
arr[1] = 3.0;
arr[2] = 5.0;
// ...
Run Code Online (Sandbox Code Playgroud)
至少,即使您不打算使用CComSafeArray它,也可以解构其源代码,<atlsafe.h>让您更好地了解SAFEARRAY函数的内容,时间,原因和方式.
| 归档时间: |
|
| 查看次数: |
28871 次 |
| 最近记录: |