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接口库。

深信服科技 all right reserved,powered by Gitbook本文档更新于: 2024-07-25 14:08

results matching ""

    No results matching ""