如何在C中创建和初始化SAFEARRAY双精度来传递给C#
发布时间:2020-12-16 05:30:56 所属栏目:百科 来源:网络整理
导读:我的C#方法需要从C调用 最初我的C#方法采用double []类型的参数,但是当从C调用时,它将成为一个SAFEARRAY 在C中,我需要从一个双精度数组中获取数据,并填充一个SAFEARRAY.我没有找到任何示例代码来做到这一点. 任何帮助是赞赏 解决方法 以下是在C中创建safearr
我的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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |