初始化HOOPS交换
本指南解释了如何在您的项目中加载和初始化HOOPS Exchange以供使用。确保您已经按照上一个教程中所示配置了项目。
HOOPS Exchange是一个通过C API使用的库,以头文件和二进制文件的形式提供。主二进制文件是一个名为A3DLIBS.dll、libA3DLIBS.so或A3DLIBS.dylib的共享库,具体取决于您的操作系统。对于iOS,它是一个名为A3DLIBS.a的静态库。
要加载C语言库,您可以在应用程序构建期间链接它,也可以在运行时使用LoadLibrary (Windows)或dlopen(GNU编译器)等系统调用手动加载它。HOOPS Exchange使用显式加载方法。
交换标头
在您的程序中,负责初始化HOOPS Exchange的源文件必须包含头文件A3DSDKLoader.h。只有一个源文件应加载HOOPS Exchange,并且它应包含A3DSDKLoader.h。其他项目文件可以包含单个源文件(如A3DSDKConvert.h),或使用一劳永逸的A3DSDKIncludes.h来包含整个API。
Linux和macOS开发人员请注意:HOOPS Exchange使用动态加载。如果您在Linux或macOS上使用HOOPS Exchange,请确保您的编译器配置了HAVE_DLFCN_H预处理器标志,并使用链接器选项链接到DLFCN -ldl。
加载库
要加载库,请使用库文件夹的路径调用函数A3DSDKLoadLibrary。例如:
A3DBool loaded = A3DSDKLoadLibraryA(PATH_TO_A3DLIBS_DIR); if (loaded) { // HOOPS Exchange Loaded}
提供许可证
加载库后,第一个调用的函数是A3DLicPutUnifiedLicense().此函数提供库运行所需的许可证密钥:
A3DStatus result = A3DLicPutUnifiedLicense(HOOPS_LICENSE); if (result == A3D_SUCCESS) { // License provided}
如果在没有有效许可证的情况下进行任何API调用,则会返回A3D_INVALID_LICENSE。
初始化库
HOOPS Exchange的初始化是执行内部初始化的库端操作。A3DDllInitialize()使用主要版本号和次要版本号进行调用。使用A3D_DLL_MAJORVERSION和A3D_DLL_MINORVERSION指定与头文件相同的版本。例如:
A3DStatus result = A3DDllInitialize(A3D_DLL_MAJORVERSION, A3D_DLL_MINORVERSION); if (result == A3D_SUCCESS) {// HOOPS Exchange initialized}
初始化是一项一次性操作。如果多个程序加载相同的HOOPS Exchange二进制文件,则初始化是共享的。该函数A3DDllIsInitialized()检查库是否已经初始化。
终止库
当您的应用程序完成HOOPS Exchange后,请调用A3DDllTerminate()以处置任何使用的资源。每个应用程序应该调用一次,并且应该与对 的调用配对A3DDllInitialize()。
卸载库
要卸载库,请使用A3DSDKUnloadLibrary().这会将所有函数指针重置为0并卸载库文件。
A3DSDKUnloadLibrary()
代码示例
下面是一个用C编写的最小工作示例,演示了如何初始化HOOPS Exchange:
#define INITIALIZE_A3D_API #include int main(int argc, char* argv[]) { // Load the library A3DBool loaded = A3DSDKLoadLibraryA(PATH_TO_A3DLIBS_DIR); assert(loaded); // Initialize and terminate if not already done A3DBool must_initialize = !A3DDllIsInitialized(); if (must_initialize) { A3DStatus result = A3DLicPutUnifiedLicense(HOOPS_LICENSE); assert(result == A3D_SUCCESS); result = A3DDllInitialize(A3D_DLL_MAJORVERSION, A3D_DLL_MINORVERSION); assert(result == A3D_SUCCESS); } // HOOPS Exchange ready to use! if (must_initialize) { A3DDllTerminate(); } // Unload the library A3DSDKUnloadLibrary() return EXIT_SUCCESS; }
包含INITIALIZE_A3D_API宏以提供必要的功能。请记住仅将其包含在一个源文件中,以避免多重定义错误。
特别规则
对于iOS版本,HOOPS Exchange提供HOOPS Parasolid Bridge作为扩展库。它允许HOOPS Exchange和Parasolid之间的转换。在iOS上将HOOPS Exchange与Parasolid Bridge一起使用时,定义A3DAPI_NO_IOS_HEPB_STUB宏以避免链接器错误问题。
#define A3DAPI_NO_IOS_HEPB_STUB #include // HOOPS Exchange Initialization
A3DSDKLoader.h头文件提供函数并定义函数指针。确保仅将其包含在一个源文件中以避免错误。
HOOPS ExchangeLoader类
对于C++应用程序,您可以使用该类HOOPSExchangeLoader来简化HOOPS Exchange的初始化和处置。该类确保HOOPS Exchange在其生命周期内进行初始化,并在实例超出范围时自动释放。
慧都科技是Tech Soft 3D-HOOPS在中国区的唯一增值服务商,负责HOOPS与CEETRON试用,咨询,销售,技术支持,售后,旨在为企业提供一站式的3D开发解决方案。如果您的企业目前也有3D数据格式转换、3D Web轻量化渲染的需求,欢迎咨询在线客服申请3D 轻量化引擎HOOPS的60天免费试用。
↓↓扫码添加客服微信,及时获取“HOOPS技术”支持↓↓
发表评论