Administrator
Administrator
发布于 2023-07-10 / 84 阅读 / 0 评论 / 0 点赞

1.5 激活ODA

本节介绍了ODA软件激活、激活过程以及如何维护使用已激活的ODA产品的自定义应用程序。

什么是ODA软件激活

ODA软件激活是一种机制,用于检查许可成员是否使用ODA产品。
通过ODA订阅,您将获得唯一的成员激活信息。所有ODA产品都需要唯一的成员激活信息,以正确初始化并提供支持的功能,用于创建自定义应用程序。
ODA激活信息包括:
●MemberID字符串,由成员凭据信息生成,并唯一标识一个成员。
●使用ODA私钥创建的数字签名,即使在ODA源代码中也不可用。
注意:ODA激活数据每年初都会更新,因此在升级发布的ODA SDK时,必须更新您的激活文件。否则,ODA软件初始化将失败并抛出异常。

如何获取ODA激活信息

获取激活信息的步骤如下:
1访问ODA官方网站上的激活链接https://opendesign.com/members/activation,并在需要时进行登录:


2登录表单 登录后,检查您的激活名称,如果正确,请选择您使用的ODA平台版本,然后点击"Generate for C++"。


3激活页面 浏览器会提示您下载包含激活信息的OdActivationInfo文件。
将此文件保存在您自定义应用程序项目的INCLUDE_PATH变量可访问的目录中,例如ODA平台安装目录下的ThirdParty/activation子文件夹中。

在构建ODA示例或开发自定义C++应用程序时,如何使用ODA激活信息

C++自定义应用程序需要调用odInitialize()函数以获取对ODA API功能的访问权限。在运行odInitialize()函数时,将验证激活信息文件中的激活名称和签名。如果验证失败,ODA API将抛出"未激活!"的OdError异常。
如果您传递给odInitialize()函数的系统服务对象继承自ExSystemServices类,请将OdActivationInfo文件放置在已添加到INCLUDE_PATH变量的目录中。在这种情况下,编译器在构建过程中可以访问OdActivationInfo文件。例如,您可以将OdActivationInfo文件放置在ODA平台文件夹的ThirdParty/activation目录中,并将此路径添加到项目的INCLUDE_PATH值中。
如果您没有ODA激活文件,请参阅本文档中的"如何获取ODA激活信息"部分,获取有关获取激活文件的详细信息。
如果激活文件放置在编译器无法访问的位置,您将收到编译器错误,例如"Kernel/Extensions/ExServices/ExSystemServices.h:43:10: fatal error: 'OdActivationInfo' file not found"。
如果您传递给odInitialize()函数的系统服务对象未继承自ExSystemServices类,请显式调用odActivate()函数,并向其传递来自OdActivationInfo文件的MemberID和数字签名。在调用odInitialize()函数之前应调用odActivate()函数。请参考下面的代码片段,演示了这种方法。

class MyServices : public ExHostAppServices, RxSystemServicesImpl //类MyServices不继承自ExSystemServices类。
{

...

};

...

//创建MyServices的实例

OdStaticRxObject<MyServices> svcs;

//调用odActivate

// odActivate("来自OdActivationInfo文件的第一个字符串", "来自OdActivationInfo文件的第二个字符串");

//或者更好的方式,如下所示。升级到新版本需要新的OdActivationInfo文件,无需修改代码。

odActivate(

#include "OdActivationInfo"

);

...

//只有在调用odActivate之后才调用odInitialize

odInitialize(&svcs);

...

在结束应用程序执行之前,建议调用odCleanUpStaticData()函数来卸载MemberID和数字签名。如果使用ODA SDK,还应使用相应的反初始化函数进行反初始化。例如,要反初始化Visualize SDK并停用ODA:

void ODASdkDeactivate() { odCleanUpStaticData(); }
...

// 反初始化ODA Visualize SDK odTvUninitialize();

ODASdkDeactivate();



评论