如何在C中创建和初始化SAFEARRAY双精度来传递给C#

我的C#方法需要从C调用

最初我的C#方法采用double []类型的参数,但是当从C调用时,它将成为一个SAFEARRAY

在C中,我需要从一个双精度数组中获取数据,并填充一个SAFEARRAY.我没有找到任何示例代码来做到这一点.

任何帮助是赞赏

解决方法

以下是在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);
    }
}

当你完成像下面的代码,释放指针 –

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 for C,那么最好使用在“atlsafe.h”中声明的CComSafeArray.这是SAFEARRAY的包装. link text

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...