文章目录
1.Suites类
- 1.Suites类
- 2.作者答疑
在illustrator里,有许多不同的功能模块,这些模块在插件开发中如果需要使用,就必须先加载,或者初始化,获取其接口。这时必然使用到Suites这个类。头文件代码如下:
struct ImportSuite
{
const char *name;
int version;
void *suite;//指针变量
};
const ASInt32 kStartOptionalSuites = 'OPTS';
const ASInt32 kEndAllSuites = 0;
// The fAcquiredCount field is not necessarily maintained across unload/reloads;
// in fact it probably isn't. Whenever we first create a Suites object after
// being loaded or reloaded, it's important to call InitializeRefCount on it.
class Suites
{
public:
Suites();
~Suites();
ASErr Error() { return fError; }
void InitializeRefCount() { fAcquiredCount = 1; }
void acquire_Optional_Suites();
private:
static ASUInt16 fAcquiredCount;
ASErr fError;
ASUInt16 fOptionalSuitesTotalCount;
ASUInt16 fRequiredSuitesCount;
ASUInt16 fOptionalSuitesAcquiredCount;
ASErr AcquireSuites();//获取模块组件
ASErr ReleaseSuites(); //释放模块组件
ASErr AcquireSuite(ImportSuite *suite);
ASErr ReleaseSuite(ImportSuite *suite);
};
初始化函数,代码如下:
Suites::Suites()
: fOptionalSuitesTotalCount(0),
fOptionalSuitesAcquiredCount(0),
fRequiredSuitesCount(0)
{
fError = AcquireSuites();//请求加载模块
ASUInt16 i = 0;
while( (gImportSuites[i++].name != nil))
{ ++fRequiredSuitesCount; } // Skip all required suites.
if(gImportSuites[i - 1].version == kStartOptionalSuites)//计算额外模块
{
while(gImportSuites[i++].name != nil)
{
++fOptionalSuitesTotalCount;
}
}
if(kNoErr == fError)
acquire_Optional_Suites();
}
单个模块的请求加载,代码如下:
ASErr Suites::AcquireSuite(ImportSuite *suite)
{
ASErr result = kNoErr;
if (suite->suite != nil) {
result = sSPBasic->AcquireSuite(suite->name,
suite->version,
(const void **)suite->suite);
}
return result;
}
单个模块的释放卸载,代码如下:
ASErr Suites::ReleaseSuite(ImportSuite *suite)
{
ASErr result = kNoErr;
if (suite->suite != nil) {
void **s = (void **) suite->suite;
if (*s != nil) {
result = sSPBasic->ReleaseSuite(suite->name, suite->version);
*s = nil;
}
}
return result;
}
多个模块的请求加载,代码如下:
ASErr Suites::AcquireSuites()
{
ASErr result = kNoErr;
ASUInt16 i;
if (fAcquiredCount == 0)
{
//基础模块
for (i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?