客户端 SDK 接入步骤(Windows )

接入要求

  1. 需要有项目源码,开发环境正常可重新编译发布。
  2. 具备一定的开发能力,可根据 API 文档和程序样例加入 SDK 启动代码。

准备素材

  1. 准备项目源码和开发环境,测试可正常编译。
  2. 下载 SDK 文件(点此下载),将 protect.dll 文件复制到项目中,确保与 exe 程序文件在相同目录。

注意事项

  1. SDK 加载流程为:
    加载 dll -> 调用启动函数 -> 正常运行过程直到需要关闭 -> 调用停止函数 -> 卸载 dll
    退出程序前一定要调用停止函数,否则可能造成进程死锁。
  2. 启动函数只有一个参数 config,类型为 c 字符串,格式为 json 文档,通常只有一个字段:
    {"access_key":"接入码"}

    在 C/C++ 语言使用时注意引号要转义(\”)

    const char* config = "{\"access_key\":\"接入码\"}";
    DWORD result = protect_start(config);

加载说明

C++
  1. 引入头文件并声明函数
    #include <windows.h>
    #include <iostream>
    
    // 定义函数指针类型
    typedef DWORD (WINAPI *protect_start_t)(const char* config);
    typedef DWORD (WINAPI *protect_stop_t)();
    
    // 全局变量来保存 DLL 模块句柄和函数指针
    HINSTANCE hDLL = NULL;
    protect_start_t protect_start = NULL;
    protect_stop_t protect_stop = NULL;
  2. 加载
    // 加载 DLL 并获取函数地址
    bool LoadMyDLL()
    {
        // 加载 DLL
        hDLL = LoadLibrary("protect.dll");
        if (hDLL == NULL) {
            std::cerr << "无法加载 DLL" << std::endl;
            return false;
        }
    
        // 获取开启函数地址
        protect_start = (protect_start_t)GetProcAddress(hDLL, "protect_start");
        if (protect_start == NULL) {
            std::cerr << "无法加载函数地址: protect_start" << std::endl;
            FreeLibrary(hDLL);
            return false;
        }
        // 获取停止函数地址
        protect_stop = (protect_stop_t)GetProcAddress(hDLL, "protect_stop");
        if (protect_stop == NULL) {
            std::cerr << "无法加载函数地址: protect_stop" << std::endl;
            FreeLibrary(hDLL);
            return false;
        }
    
        return true;
    }
  3. 释放
    // 释放 DLL
    void UnloadMyDLL()
    {
        if (hDLL != NULL) {
            protect_stop = NULL; 
            protect_start = NULL;
            FreeLibrary(hDLL);
            hDLL = NULL;
        }
    }
  4. 使用 main 函数演示生命周期
    // 主函数
    int main()
    {
        // 加载 DLL
        if (!LoadMyDLL())
            return -1;
    
        // 调用启动函数
        const char* config = "{\"access_key\":\"接入码\"}";
        DWORD result = protect_start(config);
        std::cout << "函数返回: " << result << std::endl;
    
        // 执行直到需要关闭,用等待 30 秒替代
        Sleep(30000);
    
        // 调用关闭函数
        protect_stop();
    
        // 释放 DLL
        UnloadMyDLL();
    
        return 0;
    }