【发布时间】:2019-06-18 02:35:21
【问题描述】:
我在 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);
【问题讨论】:
-
SAFEARRAY Data我很确定命名参数可能不是无效的。 -
对不起,我忘了 *
-
C++ 数组不会在任何地方存储长度。没有办法得到任意数组的长度。
-
我无法通过库获取数据的长度。 SAFEARRAY 是微软的东西,他们没有提供在库的 linux 端口中使用它的方法。
-
库应该为您提供从 SAFEARRAY 或带有结构定义的标题中提取所需数据的功能。他们提供示例代码吗? SAFEARRAY 是丑陋的野兽msdn.microsoft.com/en-us/magazine/…