我试图了解一些关于HGLOBAL
因为我刚刚发现我的想法根本就是错误的。
在应用程序A中GlobalAlloc()
数据(与GMEM_SHARE|GMEM_MOVABLE
)并放置字符串"Test"
在里面。现在,我可以向另一个应用程序提供什么来获取该数据?
我认为(错误地!)HGLOBAL
s 在所有进程中都有效,这显然是错误的,因为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 或new
C++ 中的运算符)。 Win16 上还存在几种不同类型的指针,以反映 x86 上可用的几种不同寻址模式 - 近(同一段)、远(段:偏移)和巨大(规范化段:偏移)。你仍然可以看到类似的东西FARPTR
在移植到 Win32 的旧版 Win16 代码中,它们被定义为空字符串,因为在平面模式下仅使用近指针。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)