Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 我应该释放复制到剪贴板的内存吗?_Winapi_Memory - Fatal编程技术网

Winapi 我应该释放复制到剪贴板的内存吗?

Winapi 我应该释放复制到剪贴板的内存吗?,winapi,memory,Winapi,Memory,当我将win32程序中的数据复制到剪贴板时,我是否应该在将复制到剪贴板的内存粘贴到其他位置后释放它?或者由系统负责 应用程序负责处理剪贴板上的数据(如果将其放在剪贴板上)。这就是为什么很多应用程序(如Microsoft Office)在退出应用程序时会询问您是否要将大量数据保留在剪贴板上 但是,我强烈建议用户交互,因为您不知道用户以后是否需要剪贴板上的数据。这通常是由系统完成的,但是,一些负责任的应用程序也会在用户离开之前要求用户释放剪贴板 e、 在退出之前,MSWord将要求用户将数据保存在内

当我将win32程序中的数据复制到剪贴板时,我是否应该在将复制到剪贴板的内存粘贴到其他位置后释放它?或者由系统负责

应用程序负责处理剪贴板上的数据(如果将其放在剪贴板上)。这就是为什么很多应用程序(如Microsoft Office)在退出应用程序时会询问您是否要将大量数据保留在剪贴板上


但是,我强烈建议用户交互,因为您不知道用户以后是否需要剪贴板上的数据。

这通常是由系统完成的,但是,一些负责任的应用程序也会在用户离开之前要求用户释放剪贴板

e、 在退出之前,MSWord将要求用户将数据保存在内存中或不保存。 对于一般用途,您可以将其留给系统


请记住,用户可能希望将其保留在剪贴板中(即使在关闭应用程序之后),因此您不应将其弄乱并从内存中删除。

有两种方法将数据放在剪贴板上

方法1:通过调用
SetClipboardData
并传递非
NULL
值作为第二个参数,将数据直接放入剪贴板。在这种情况下,系统将对数据负责,您不应自行释放数据

方法2:通过调用
SetClipboardData
并将
NULL
作为第二个参数传递,将占位符放在剪贴板上。在这种情况下,应用程序对数据负责,直到使用非
NULL
第二个参数调用
setclibpoardata
时为止,此时责任转移到操作系统

你的问题不清楚你在用哪种方法。

:

如果SetClipboardData成功,则系统拥有由hMem参数标识的对象。一旦所有权转移到系统,应用程序可能不会写入或释放数据


完全可以选择跟踪剪贴板数据,以便在关闭应用程序时将其从剪贴板中删除。一旦数据位于剪贴板上,系统将拥有该数据,并且该数据与您的应用程序分离,因此您可以选择将其保留在剪贴板上,以便在应用程序关闭后继续使用。除非您使用延迟渲染,否则在这种情况下,关闭应用程序时将其从剪贴板中删除是有意义的,因为当其他应用程序请求时,您的应用程序将不再运行以渲染数据。

“您可以将其留给系统”,此时系统将完全不执行任何操作,关闭或重新启动时除外。应用程序负责它放在剪贴板上的数据,而不是系统。@John Willemse:是的,这是真的,但即使是你也不应该对它做任何事情,因为它是由用户所有的,由用户决定他/她是否想将其保留在内存中。@John Willemse:除了Microsoft office,列出负责清理剪贴板或要求用户这样做的应用程序。你几乎找不到几个,这是有原因的。你不明白我的意思。根据我的回答,我同意你通常应该把它留在剪贴板上。但是,如果应用程序将大量数据放在剪贴板上,建议查询用户是否希望将其保留在剪贴板上。系统不会自动清理数据,即使这可能会影响性能。这取决于数据的放置方式。如果通过
SetClibpoardData
和一个非
NULL
数据参数放在那里,那么操作系统负责数据,而不是应用程序。谢谢雷蒙德,我不知道。你的博客的忠实粉丝(顺便说一句;)