文章目录
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
关注
打赏
热门博文
- Adobe illustrator插件开发-SPInterfaceSuite-插件A向插件B传递消息-插件通信-AI插件开发
- javascript-ztree-树形控件-初始化-加载节点数据-节点数据获取
- Adobe illustrator插件开发-坐标系统-AIHardSoftSuite-画板坐标-页面坐标-AI插件开发
- Adobe illustrator插件开发-AIUIDUtilsSuite-AIUIDPoolSuite-AIUIDSuite-AIUIDREFSuite-Art唯一标识符与索引-AI插件开发
- C++-逆向分析-类的成员函数地址与对象地址动态绑定-this指针-成员函数和成员虚函数反汇编解析
- C++-逆向分析-结构体和类-内存布局-this指针-静态数据成员-对象作为参数和返回值
- Adobe illustrator插件开发-命令名称-AddCommand -AI插件开发
- Adobe illustrator插件开发-事件-PlugPlugAddEventListener-向系统注册事件-AI插件开发
- Adobe illustrator插件开发-ole拖拽粘贴交换数据格式-RegisterClipboardFormat函数-AI插件开发
- Adobe illustrator插件开发-所有模块列表-内部存在大量非公开的Suite-AI插件开发