接入要求
- 需要有项目源码,开发环境正常可重新编译发布。
- 具备一定的开发能力,可根据 API 文档和程序样例加入 SDK 启动代码。
准备素材
- 准备项目源码和开发环境,测试可正常编译。
- 下载 SDK 文件(点此下载),将 protect.dll 文件复制到项目中,确保与 exe 程序文件在相同目录。
注意事项
- SDK 加载流程为:
加载 dll -> 调用启动函数 -> 正常运行过程直到需要关闭 -> 调用停止函数 -> 卸载 dll
退出程序前一定要调用停止函数,否则可能造成进程死锁。 - 启动函数只有一个参数 config,类型为 c 字符串,格式为 json 文档,通常只有一个字段:
{"access_key":"接入码"}
在 C/C++ 语言使用时注意引号要转义(\”)
const char* config = "{\"access_key\":\"接入码\"}"; DWORD result = protect_start(config);
加载说明
C++
- 引入头文件并声明函数
#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;
- 加载
// 加载 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; }
- 释放
// 释放 DLL void UnloadMyDLL() { if (hDLL != NULL) { protect_stop = NULL; protect_start = NULL; FreeLibrary(hDLL); hDLL = NULL; } }
- 使用 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; }