如何与其他应用程序共享 HGLOBAL?

2023-11-29

我试图了解一些关于HGLOBAL因为我刚刚发现我的想法根本就是错误的。

在应用程序A中GlobalAlloc()数据(与GMEM_SHARE|GMEM_MOVABLE)并放置字符串"Test"在里面。现在,我可以向另一个应用程序提供什么来获取该数据?

我认为(错误地!)HGLOBALs 在所有进程中都有效,这显然是错误的,因为HGLOBAL is a HANDLE指向全局数据,而不是指向全局数据的指针(这就是我说“OHHHH!”的地方)。

那么我怎样才能通过HGLOBAL到另一个应用程序?

注意:我只想传递一个指向数据的“指针”,而不是数据本身,就像在剪贴板中一样。

多谢! :-)


(这只是一个很长的评论,因为其他人已经解释过 Win32 采用不同的内存共享方法。)

我想说的是,您正在阅读有关 Windows 编程的书籍(或教程),这些书籍(或教程)已经非常古老且过时,因为 Win16 实际上已经死亡相当长一段时间了。

16 位 Windows (3.x) 没有 32 位(及更高版本)Windows 版本提供的内存隔离(或虚拟/平面/地址空间)概念。那里的内存过去被分为本地(进程)和全局部分,两者都位于相同的全局地址空间中。描述符如HGLOBAL用于允许内存块在物理内存中移动,并且尽管它们在地址空间中的新位置(在正确固定之后)仍然可以正确访问LocalLock()/GlobalLock())。 Win32 使用指针,因为可以移动物理内存页而不影响它们在虚拟地址空间中的位置。它仍然提供所有Global* and Local*出于兼容性原因,API 函数不应再使用,而应使用通常的堆管理(例如malloc()在 C 或newC++ 中的运算符)。 Win16 上还存在几种不同类型的指针,以反映 x86 上可用的几种不同寻址模式 - 近(同一段)、远(段:偏移)和巨大(规范化段:偏移)。你仍然可以看到类似的东西FARPTR在移植到 Win32 的旧版 Win16 代码中,它们被定义为空字符串,因为在平面模式下仅使用近指针。

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

如何与其他应用程序共享 HGLOBAL? 的相关文章

随机推荐

  • 更改 .NET MAUI 应用程序中的汉堡菜单图标

    如何更改 NET MAUI 应用程序中的汉堡菜单图标 我已经更新了所有图标的样式 我想将汉堡菜单图标更改为自定义PNG 我尝试了以下内容Styles xaml但这似乎不是要编辑的正确属性 FlyoutPage的解决方案 的飞出FlyoutP
  • 将数组转换为 JSON

    我需要引入 csv 文档并将其转换为 JSON 到目前为止 我已经能够将其转换为数组 并且我正在尝试从该数组构建一个 JSON 对象 下面是构建 JSON 的 JavaScript 但它不在我需要的结构中 下面是所需结构的示例 var js
  • 如何在 JavaScript 中获取之前的 URL?

    JavaScript 有没有办法获取之前的 URL 像这样的东西 alert previous url is window history previous href 有这样的事吗 或者我应该把它存储在 cookie 中 我只需要知道 这样
  • 更改字符指针变量中的字符[重复]

    这个问题在这里已经有答案了 我正在尝试更改 char 指针变量指向的字符 char test3 mutable printf Expected mutable Result s n test3 testt test3 printf Expe
  • plot3d - 如何更改框颜色并删除轴刻度

    我正在尝试对默认的plot3d 对象进行一些视觉修改 具体来说 我想将灯箱颜色作为背景 仅在框中 而不是整个调色板中 并删除轴刻度线 轴上的 x y z 值会分散注意力 我花了无数的时间在谷歌上搜索要改变的选项 但我一生都无法弄清楚这一点
  • 未找到中央目录条目(ZipException)

    我正在尝试将 zip 文件下载到 SD 卡 我正确下载了它 但是当我打开下载的文件 使用 ZipFile 时 我收到此 ZipException 未找到中央目录条目 互联网文件没问题 SD 复制文件没问题 从 PC 打开并正确显示文件 但由
  • 连接父表和子表的最佳方式

    我有父表A A有几个子表 例如B C D E F G子表不相互链接 它们仅链接到A A有钥匙Id它在所有子表中用作外键 连接这些表的最佳方式是什么 以便我可以为此创建单个视图 由于父表中的某些表可能有子行 因此您必须使用 LEFT OUTE
  • 在使用变量调用的函数中实现 mutate

    我想使用不同的变量多次调用一个函数 每次都为数据框中的新变量设置一个值 这是我失败的尝试 我很感激任何帮助 dat lt tibble score1 runif 10 score2 score1 2 call mutate with var
  • WCF:序列化为数组的通用列表

    因此 我正在使用 WCF 和我的服务返回包含通用列表的类型 WCF 当前正在通过网络将它们转换为数组 有没有办法配置 WCF 之后将它们转换回列表 我知道有一种方法可以在添加服务引用时单击 高级 但我正在配置文件或类似的内容中寻找解决方案
  • 使用 csv 读取将值添加到 DASK 数据帧导入的列

    假设使用以下命令将五个文件导入到 DASKcsv read 为此 我使用以下代码 import dask dataframe as dd data dd read csv final file list msg header None 每个
  • 如何一次操作一个 XML 文档的一个父元素?

    我正在尝试使用 C 和 Visual Studio 2008 从在线购物车获取包含多个订单的 XML 文件 对其进行解析并输出每个订单的值作为其自己的文本文件 不是 XML 我尝试了多种方法这一点 却一直没有运气 我的最后一次尝试包括与 X
  • 如何在导航抽屉中设置操作栏标题中心?

    我正在使用本教程中的导航抽屉http www androidhive info 2013 11 android sliding menu using navigation drawer 一切工作正常 但问题是我的标题在左侧对齐 但我希望操作
  • 循环不删除所有需要的行

    我的代码应该计算 WIP 工作表中的行数 然后循环遍历这些行 如果 B 列中的字符串包含单词 out 则删除该行 Sub delete numrows Worksheets WIP Cells Rows Count A End xlUp R
  • 用通俗易懂的方式解释 C# 中的泛型? [复制]

    这个问题在这里已经有答案了 重复的C 中的 语法是什么 实际上我想知道 为什么以及何时应该使用泛型 有什么必要呢 泛型是确保 C 编译时类型安全的一种方法 示例 预泛型 class Person string name string las
  • WCF 服务的 Win32Exception @ ServiceHost.Open()

    我正在为我正在编写的一系列广泛的 WCF 服务基础设施编写 BDD 规范 我注意到我编写的每个规范都涉及对 ServiceHost Open 的调用 该行需要花费 2 6 秒的时间来执行 随着我添加越来越多的规范 时间不断增长 我注意到 当
  • 以编程方式安装 NDIS 筛选器驱动程序

    我正在尝试以编程方式编写 C 代码来安装 NDIS 6 0 轻量级筛选驱动程序 在查看了 WinDDK 在线示例和 MSDN 文档后 我最终得到了 下面的代码示例 为了清楚起见 跳过了错误处理 问题是 INetCfgClassSetup I
  • 如何获取 OSX 上当前工作区/屏幕壁纸的路径?

    从 AppKit 10 7 版本开始 NSWorkspace desktopImageForScreen可能会返回文件夹的路径 而不是当前作为壁纸的文件的 URL 该文件夹是按顺序选取壁纸进行显示的位置 搜索setDesktopImageU
  • Android - 当活动完成时线程会发生什么?

    我有一个Activity 这会启动一个Thread做一些工作 如果用户按下后退按钮 或者 UI 线程调用 会发生什么finish 到线程 活动是否会等待线程finish 在活动被销毁之前 Activity 被销毁后线程是否完成其工作 线程将
  • Websocket.disconnect() 方法抛出 java.net.SocketException: 套接字已关闭

    我在我的项目中使用 codebutler 的 android websockets 库 但是我执行的时候遇到了问题disconnect 方法 以下是代码 public void disconnectServer if client null
  • 如何与其他应用程序共享 HGLOBAL?

    我试图了解一些关于HGLOBAL因为我刚刚发现我的想法根本就是错误的 在应用程序A中GlobalAlloc 数据 与GMEM SHARE GMEM MOVABLE 并放置字符串 Test 在里面 现在 我可以向另一个应用程序提供什么来获取该