3.2 集成方式
Windows CSSDK提供了静态库以及动态库文件,主文件分别是aTrustSDK.dll和aTrustSDK.lib。静态库和动态库都提供了32位和64位两种形式。
3.2.1 动态库集成
1. 利用lib符号文件
动态库集成可以分为两种方式,一种是利用aTrustSDK.dll动态库配套的符号文件,也就是同文件夹下的aTrustSDK.lib文件。您可以在您的CMakeLists.txt文件中添加如下代码:
target_link_directories(${YOUR_PORJECT_NAME} PRIVATE "../../SDK/shared")
target_link_libraries(${YOUR_PORJECT_NAME} aTrustSDK)
并在您的C/C++代码中包含atrust_sync_sdk.h头文件引用后,就可以正确地编译您的程序了。
在运行您的程序之前,可以选择将aTrustSDK.lib对应的aTrustSDK.dll文件,以及openssl和其他的相关动态依赖库文件放到您项目的执行目录下。
2. 使用动态加载
您还可以选择在运行时加载aTrustSDK.dll动态库的方式进行集成。您可以参考如下C++代码片段:
#include <windows.h>
#include "atrust_sync_sdk.h"
//...
// aTrustSDK动态库函数类型定义,注意__stdcall调用约定
typedef atrust_error_code(__stdcall *Fatrust_sync_query_status)(atrust_status **);
HINSTANCE dllHander = LoadLibrary("aTrustSDK.dll");
if (dllHander == NULL) return -1;
Fatrust_sync_query_status myAtrustSyncQueryStatusFunc = (Fatrust_sync_query_status)GetProcAddress(dllHander, "atrust_sync_query_status");
if (myAtrustSyncQueryStatusFunc == NULL) return -1;
atrust_status* status;
atrust_error_code ec = myAtrustSyncQueryStatusFunc(&status);
在这种方式下需要特别注意,我们SDK的所有接口都设置了 __stdcall 接口调用约定。请确保您定义的对应函数类型包含了__stdcall调用约定,否则将会导致崩溃等错误。
3.2.2 静态库集成
使用静态库集成的方式和使用动态库的lib符号文件类似,但是需要在cmake文件中额外连接openssl的静态库:
target_link_directories(${PROJECT_NAME} PRIVATE "../../../SDK/static")
target_link_directories(${PROJECT_NAME} PRIVATE "../../../SDK/depends/static")
target_link_libraries(${PROJECT_NAME} aTrustSDK libssl_static libcrypto_static)
另外,需要将工程设置为Release模式。由于是静态链接,您不需要再将依赖库额外拷贝到您的执行目录下。
3.2.3 node库方式集成
对于使用electron开发的桌面应用,需要集成CSSDK, 使用node.js加载C接口库不好直接调用和使用其中的指针参数。针对这种场景有其他客户定制过node版本的CSSDK接口库,可以单独联系获取对应的node版本SDK接口库。