首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux上的SAFEARRAY

linux上的SAFEARRAY
EN

Stack Overflow用户
提问于 2019-01-24 19:11:20
回答 1查看 398关注 0票数 5

我在linux上使用了一个专有库,它在回调函数中使用了SAFEARRAY类型:

HRESULT Write(SAFEARRAY *Data)

在头文件中,SAFEARRAY被定义为typedef void SAFEARRAY

我必须定义一个回调函数来获取数据(例如,作为*unsigned char)和它的长度(例如作为intsize_t),并将数据写到某个地方。

类似于:

代码语言:javascript
复制
HRESULT MyWrite(SAFEARRAY *Data) {
  unsigned char *data = SafeArrayGetData(Data);
  size_t length = SafeArrayGetLength(Data);
  write_data_somewhere(data, length);
}

然后在库中使用它:

代码语言:javascript
复制
ProprietaryLib::ExportThing(thing, MyWrite);

所以我的问题是:如何在没有oaidl.holeauto.h头文件的linux上获取数据及其长度。

EN

回答 1

Stack Overflow用户

发布于 2019-02-01 06:16:15

关于这个问题有两个想法:

Wine

  • 可能你已经看过了,但它实现了SAFEARRAY。因此,您可以看看

代码语言:javascript
复制
- [https://github.com/wine-mirror/wine/blob/master/dlls/oleaut32/safearray.c](https://github.com/wine-mirror/wine/blob/master/dlls/oleaut32/safearray.c)
- [https://github.com/wine-mirror/wine/blob/master/include/oaidl.idl](https://github.com/wine-mirror/wine/blob/master/include/oaidl.idl)
- [https://github.com/wine-mirror/wine/blob/master/include/oleauto.h](https://github.com/wine-mirror/wine/blob/master/include/oleauto.h)

  • 在我看来,要获得数组的长度和数据,只需访问结构的成员就可以了。例如,在safearray.c中,它们只是在不同的位置读取cbElements,而SafeArrayAccessData方法基本上只返回pvData。(此外,它还“锁定”数组。“锁定”似乎是在调整SAFEARRAY大小或释放SAFEARRAY时检查的引用计数器。)

因此,也许您可以输出原始字节,并查看是否检测到模式。如果这是问题所在,请尝试更改您的编译器设置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54345277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档