CyberArticle导入插件

CyberArticle导入插件是一个COM组件,该组件必须支持自动化技术(实现IDispatch)。CyberArticle通过IDispatch接口来调用相应的方法,来导入文件。

COM对象需要的属性:

属性名称
属性类型
读写
是否必须
描述
PluginFlags
整数(VT_I4)
CyberArticle会通过读取该属性,来获得插件的一些属性。可能的值:
#define IMPORTP_PLUGIN_CAN_CONFIG:0x00000001    //插件可以进行设置。
ImportFlags
整数(VT_I4)
CyberArticle会通过向插件设置该属性,通知插件,用户进行的一些设置。可以有一个或者多个下面的值:
#define IMPORT_OPTIONS_FILE_NAME_AS_TITLE                   0x00000001    //文件名作为标题
#define IMPORT_OPTIONS_FILE_NAME_AS_TITLE_INCLUDE_EXT       0x00000002    //文件名作为标题,并且包含扩展名

COM对象需要的方法:

方法
是否必须
描述
Accept
CyberArticle会调用该方法,判断该插件是否支持导入某一个文件。导入插件可能需要在该方法内,检查文件的扩展名等信息,判断是否可以导入该文件。
 
参数
索引
类型
描述
1
[in] BSTR
文件名。需要检查的文件名。
 
返回值
类型:VARIANT_BOOL
  • VARIANT_TRUE:如果支持导入该文件,返回VARIANT_TRUE
  • VARIANT_FALSE:如果不支持导入该文件,返回VARIANT_FALSE
Import
CyberArticle会调用该方法,用来导入一个文件。
 
参数
索引
类型
描述
1
[in] BSTR
文件名,需要导入的文件名。
2
[in] IDispatch*
需要导入的文件,在书籍中所载的文件夹。这是一个ICANode*对象。插件应该将导入的文件,保存在这个文件夹下面。
 
返回值
类型:VARIANT_BOOL
  • VARIANT_TRUE:如果成功导入,返回VARIANT_TRUE
  • VARIANT_FALSE:如果导入操作失败,返回VARIANT_FALSE
Config
CyberArticle会调用该方法,让用户进行设置。
 
参数
 
返回值
 
注意:如果实现了该方法,您必须在PluginFlags属性中,返回IMPORTP_PLUGIN_CAN_CONFIG。
下面是一个比较典型的idl文件片断
interface ICAImportImage : IDispatch{
    [propget, id(1), helpstring("property PluginFlags")] HRESULT PluginFlags([out, retval] LONG* pVal);
    [propput, id(2), helpstring("property ImportFlags")] HRESULT ImportFlags([in] LONG newVal);
    [id(3), helpstring("method Accept")] HRESULT Accept([in] BSTR bstrFileName, [out,retval] VARIANT_BOOL* pbAccept);
    [id(4), helpstring("method Import")] HRESULT Import([in] BSTR bstrFileName, [in] IDispatch* pParentNodeDisp, [out,retval] VARIANT_BOOL* pbSucceeded);
};

注册导入插件

当您完成COM组件编写后,您还需要注册您的COM组件。除了标准的COM组件注册外,还需要在注册表的某些位置,写入一些数据,来告诉CyberArticle,有这样一个CyberArticle导入插件。
 
CyberArticle导入插件注册位置:
    HKEY_CURRENT_USER\Software\Wizissoft\CyberArticle\Plugins\Import  (仅对当前windows用户有效)
或者
    HKEY_LOCAL_MACHINE\Software\Wizissoft\CyberArticle\Plugins\Import (对当前电脑的所有用户有效)
 
导出插件组件需要在上面的注册表位置下面,创建一个新的KEY,KEY的名称是COM组件的Class ID (CLSID),在这个KEY下面,默认的value是该插件的描述。
下图就是一个典型的例子:
 
 
在卸载插件的时候,需要将相应的注册表项,从注册表中删除。
 
如果您使用C++编写插件,可以使用CyberArticleImportPluginHelper.h文件里面的函数注册一个CyberArticle导入插件,例如:
#include "C:/Program Files/Wizissoft/CyberArticle/developers/interface/include/CyberArticleImportPluginHelper.h"
...
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{    
    // registers object, typelib and all interfaces in typelib
    HRESULT hr = _AtlModule.DllRegisterServer();
    if (SUCCEEDED(hr))
    {
        /*        
        *注册CyberArticle导入插件        
        */
        CyberArticleRegisterImportPlugin(CLSID_CAImportImage, IDS_IMPORT_IMAGE);    
    }
    return hr;
}

// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
    /*    
    *卸载CyberArticle导入插件    
    */
    CyberArticleUnregisterImportPlugin(CLSID_CAImportImage);
    //
    HRESULT hr = _AtlModule.DllUnregisterServer();
    return hr;
}