首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Adobe After Effects SDK中奇怪的PF_Handle声明

Adobe After Effects SDK中奇怪的PF_Handle声明
EN

Stack Overflow用户
提问于 2020-09-12 16:27:20
回答 1查看 27关注 0票数 0

我正在尝试在我的视频编辑器中托管After Effects插件。

在实现一些Adobe回调时,有一个分配内存的套件(一组函数指针),类型为PF_Handle。这个类型有一个奇怪的typedef void **PF_Handle;声明

一个双指针。我被要求实现的函数指针描述为here

代码语言:javascript
运行
复制
PF_Handle (*host_new_handle)(A_HandleSize size);
void (*host_lock_handle)(PF_Handle pf_handle);
void (*host_unlock_handle)(PF_Handle pf_handle);
void (*host_dispose_handle)(PF_Handle pf_handle);

如果PF_Handle是一个普通的空*,那就没什么奇怪的了,我只需调用new/delete并强制转换指针即可。事实上,我正在调试的同一个插件的代码接受这个指针,锁定它,并直接使用它。但后来在同一个插件中,我看到了这样的代码:

代码语言:javascript
运行
复制
`return *(PF_Pixel**)m_bufH;`

m_bufH是通过调用host_new_handle分配的PF_Handle。这意味着插件需要一个双指针。没有调用锁定函数,插件尝试访问双指针数据,当然会失败。

可能的问题是什么?

这里会发生什么呢?锁定和解锁双指针有什么意义?

EN

回答 1

Stack Overflow用户

发布于 2020-09-12 17:38:05

句柄指向可移动存储器。内存可能会被内存管理器移动,从而使你拥有的指针失效。要创建句柄,请使用内存管理器提供的API -否则管理器将不知道如何移动已分配的内存。锁定句柄可防止内存被使用,并为您提供一个可在句柄锁定时使用的指针。保持句柄锁定的时间不应超过访问内存所需的时间,否则将违背内存管理器的用途,从而导致资源耗尽和其他问题。在编译器未对其进行优化的情况下,可以通过双重取消引用来访问未锁定的句柄。而且它比锁慢,除非你只做一件简单的事情。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63858383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档