我在linux上使用了一个专有库,它在回调函数中使用了SAFEARRAY类型:
HRESULT Write(SAFEARRAY *Data)
在头文件中,SAFEARRAY被定义为typedef void SAFEARRAY。
我必须定义一个回调函数来获取数据(例如,作为*unsigned char)和它的长度(例如作为int或size_t),并将数据写到某个地方。
类似于:
HRESULT MyWrite(SAFEARRAY *Data) {
unsigned char *data = SafeArrayGetData(Data);
size_t length = SafeArrayGetLength(Data);
write_data_somewhere(data, length);
}然后在库中使用它:
ProprietaryLib::ExportThing(thing, MyWrite);发布于 2019-02-01 06:16:15
关于这个问题有两个想法:
Wine
SAFEARRAY。因此,您可以看看- [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时检查的引用计数器。)因此,也许您可以输出原始字节,并查看是否检测到模式。如果这是问题所在,请尝试更改您的编译器设置。
https://stackoverflow.com/questions/54345277
复制相似问题