Linux 上的 SAFEARRAY

2024-01-07

我在 Linux 上使用一个专有库,它使用SAFEARRAY输入回调函数:

HRESULT Write(SAFEARRAY *Data)

SAFEARRAY在头文件中定义为typedef void SAFEARRAY.

我必须定义一个回调函数来获取数据(例如*unsigned char)和它的长度(例如int or 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);

所以我的问题是:如何在linux上获取数据及其长度,我没有oaidl.h https://learn.microsoft.com/en-us/windows/desktop/api/oaidl/ or oleauto.h https://learn.microsoft.com/en-us/windows/desktop/api/oleauto/头文件。


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

  • 也许你已经看过了,但是 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 时检查的引用计数器。)

    一个想法为什么你的MYSAFEARRAY(评论中提到)不起作用的是 结构打包可能会干扰。在https://learn.microsoft.com/en-us/cpp/build/reference/zp-struct-member-alignment https://learn.microsoft.com/en-us/cpp/build/reference/zp-struct-member-alignment他们说 Windows SDK 预先假定结构体打包在 8 字节边界上。因此,也许您可​​以输出原始字节并查看是否检测到模式。如果这确实是问题所在,请尝试更改编译器设置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 上的 SAFEARRAY 的相关文章

  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我

随机推荐

  • 最快的跨平台 A* 实施?

    有这么多可用的实现 使用小网格的 C 执行速度最快 CPU 占用最少 二进制文件最小 跨平台 Linux Mac Windows iPhone A 实现是什么 实施 谷歌返回 http www heyes jones com astar h
  • C++ Boost Graph Library:输出自定义顶点属性

    我正在努力寻找一位定制房产作家与 BGL 合作 struct IkGraph VertexProperty int id int type std pair
  • 随着 TestFlight 被 iTunes Connect 取代,企业应用 Beta 测试将会发生什么?

    我在 中找不到任何有关企业 Beta 测试的信息iTunes Connect 开发人员指南 https developer apple com library ios documentation LanguagesUtilities Con
  • 扩展jQuery的ajax功能

    我想扩展 ajax 函数 以便每当调用它时 页面上就会出现一个图像 指示正在加载内容 我可以使用本页讨论的预过滤器http api jquery com extending ajax http api jquery com extendin
  • 在 WinDbg 中定义自定义错误检查代码

    有没有一种方法可以定义自定义代码 带有消息 描述等 以便当我在 Windows 的内核模式驱动程序中调用KeBugCheckEx要发出自定义 BugCheck 代码 WinDbg 会显示该自定义 BugCheck 代码附带的关联消息吗 有关
  • 使用虚拟目录将 ASP.NET MVC 部署到 IIS 5/6

    我有一个 asp net MVC 应用程序 我想使用虚拟目录将其部署到 IIS 5 和 或 6 我已经执行了通配符路由 但相对路径有问题 假设我创建了一个名为 myApp 的虚拟目录 部署后我可以去http localhost myApp
  • pandas DataFrame旋转问题

    我有一些格式有点奇怪的雷达数据 我不知道如何使用 pandas 库正确地旋转它 My data speed time loc A 63 0000 B 61 0000 C 63 0000 D 65 0000 A 73 0005 B 71 00
  • FreeT 生成的解释器 monad 转换器的 MonadFix 实例?

    我有一个由以下命令生成的标准解释器 monad 转换器的简化版本FreeT data InteractiveF p r a Interact p r gt a type Interactive p r FreeT InteractiveF
  • 找出给定函数中调用了哪些函数[重复]

    这个问题在这里已经有答案了 可能的重复 在 R 中生成调用图 https stackoverflow com questions 4795982 generating a call graph in r 我想系统地分析给定的函数 以找出该函
  • 雄猫并没有停止。我该如何调试这个?

    我有一个Tomcat 7在我启动的 Linux 中运行 CATALINA HOME bin startup sh并通过关闭 CATALINA HOME bin shutdown sh from etc init d 除了 1 个问题外 一切
  • Qt 中的阿拉伯语与 QString

    我想向我的 Qt 应用程序添加阿拉伯语标题 但没有成功 这是我的代码 include mainwindow h include
  • Java 1.6 中的枚举类主体功能

    enum CoffeeSize BIG 8 HUGE 10 OVERWHELMING 16 public String getLidCode return A private int ounces public int getOunces
  • 使用 stackdriver CLI 查找时间戳之间的日志

    我需要使用 stackdriver CLI 查找两个时间戳之间的日志 我使用了下面的命令 gcloud beta logging read timestamp gt 2017 02 19T00 00 00Z AND timestamp lt
  • 中止多文件上传 AJAX 请求

    我试图用进度条中止多个文件上传 显示进程的状态 我想要实现的是在单击中止按钮时完全中止多个文件上传 停止进度条并清除在最初触发的多个文件上传过程中可能已上传的每个文件 下面是我的代码 var AJAX ajax xhr function v
  • 如何让 python 脚本安全退出?

    这是我有一个必须输入的密码的情况 如果输入错误 脚本将无法继续并自行退出 但我怎样才能告诉脚本安全地退出呢 I tried sys exit 但这会产生回溯错误 并且看起来不是一个非常干净的退出方法 实际上 sys exit 只会抛出一个S
  • AWS lambda无服务器网站会话维护

    我使用 Node js 作为后端开发了一个网站 最近我正在尝试将其变成无服务器并部署到 lambda 我将重写大部分代码 但只是还没弄清楚如何在用户登录后维护会话 我使用的是 express session 模块 会话数据全部记录在数据库中
  • 启动ejb bean不工作

    我正在尝试使用启动 ejb 在启动时做一些事情 但我的豆子从来没有被调用过 这是我的豆子 import javax annotation PostConstruct import javax ejb Startup import javax
  • Django cookies 在电子邮件地址周围放置双引号

    在我的登录脚本中 它为用户登录其电子邮件地址和密码创建一个 cookie 我遇到的问题是 当设置电子邮件地址时 它将整个电子邮件地址放在双引号之间 我怎样才能让它不呢 if request method POST post request
  • iOS9 self.canDisplayBannerAds = true 不显示任何广告 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 非常简单的iAd代码 import UIKit import iAd class ViewController UIViewCon
  • Linux 上的 SAFEARRAY

    我在 Linux 上使用一个专有库 它使用SAFEARRAY输入回调函数 HRESULT Write SAFEARRAY Data SAFEARRAY在头文件中定义为typedef void SAFEARRAY 我必须定义一个回调函数来获取