文章目录
- 💡 GUNION SDK 接口调用方式说明(静态库 vs 动态库)
- 📘 一、接口宏定义说明
- 🚀 二、使用方式对比
- 🧱 三、调用方使用方式详解
- ✅ 1. 使用静态库(.lib)
- ✅ 2. 使用 DLL(隐式链接)
- ✅ 3. 使用 DLL(动态加载 LoadLibrary)
- 🔍 四、导出名注意事项(运行时加载)
- 📦 五、推荐发布内容(给调用者)
- ✅ 六、宏设置汇总
💡 GUNION SDK 接口调用方式说明(静态库 vs 动态库)
本手册详细介绍 Ghome.h
接口文件在不同调用场景下的使用方式,包括宏控制、链接方式、运行时行为、适配代码等,确保调用方能够正确配置并调用 SDK 接口。
📘 一、接口宏定义说明
在 Ghome.h
中,使用如下宏控制导出/导入行为:
#if defined(GHOME_STATIC)#define GHOME_API
#elif defined(GHOME_EXPORTS)#define GHOME_API __declspec(dllexport)
#else#define GHOME_API __declspec(dllimport)
#endif
含义如下:
宏定义 | 含义说明 |
---|---|
GHOME_STATIC | 表示使用静态库(.lib),不需要 DLL |
GHOME_EXPORTS | 表示正在编译 DLL,导出符号(供别人用) |
未定义任何宏 | 默认行为,表示正在使用 DLL(导入符号) |
🚀 二、使用方式对比
使用场景 | 是否需要定义宏 | 是否使用 .lib | 是否需要 .dll | 是否使用 LoadLibrary |
---|---|---|---|---|
✅ 静态库 .lib 编译链接 | #define GHOME_STATIC | ✅ 是 | ❌ 否 | ❌ 否 |
✅ DLL(隐式链接) | 无需定义宏 | ✅ 是 | ✅ 是 | ❌ 否 |
✅ DLL(运行时动态加载) | ❌ 不需要宏 | ❌ 否 | ✅ 是 | ✅ 是 |
🧱 三、调用方使用方式详解
✅ 1. 使用静态库(.lib)
- 头文件中添加宏:
#define GHOME_STATIC
#include "Ghome.h"
- 链接设置:
- 链接
.lib
文件(例如:ghome_static.lib
) - 不需要运行时存在
.dll
- 链接
- 示例代码:
GhomeLAppInfo appInfo = { sizeof(GhomeLAppInfo), 123, L"游戏名", L"1.0", -1, -1 };
int ret = GhomeInitialize(&appInfo);
✅ 2. 使用 DLL(隐式链接)
- 不需要定义任何宏;
- 工程中链接
.lib
文件(由 DLL 编译生成); - 运行时需要
.dll
文件放在可执行文件旁边或系统 PATH 中。 - 示例代码:
#include "Ghome.h"GhomeLAppInfo appInfo = { sizeof(GhomeLAppInfo), 123, L"游戏名", L"1.0", -1, -1 };
int ret = GhomeInitialize(&appInfo);
✅ 3. 使用 DLL(动态加载 LoadLibrary)
- 不需要包含
ghome.h
(除非重用 struct 定义) - 使用
typedef
声明函数指针 - 使用
LoadLibrary
和GetProcAddress
动态调用 - 示例代码:
typedef int (__cdecl *PF_GhomeInitialize)(const GhomeLAppInfo*);
HMODULE hDll = LoadLibraryW(L"`sdologinsdk.dll`");
if (hDll) {PF_GhomeInitialize init = (PF_GhomeInitialize)GetProcAddress(hDll, "GhomeInitialize");if (init) {GhomeLAppInfo appInfo = { sizeof(GhomeLAppInfo), 123, L"游戏名", L"1.0", -1, -1 };int ret = init(&appInfo);}FreeLibrary(hDll);
}
- 优点: 不需链接
.lib
,运行时灵活控制加载; - 缺点: 函数名大小写必须匹配,需手动定义所有函数指针;
🔍 四、导出名注意事项(运行时加载)
使用 GetProcAddress
加载函数时,需要确认 DLL 中函数是否为标准 C 导出名(例如 GhomeInitialize
)而不是带修饰符的(如 _GhomeInitialize@4
)。建议:
- 在 C++ 中使用
extern "C"
包裹导出声明; - 使用
dumpbin /exports ghome.dll
验证导出名; - 保证函数名在头文件与 DLL 中完全一致。
📦 五、推荐发布内容(给调用者)
建议发布以下内容给调用者:
文件名 | 描述 |
---|---|
ghome.h | 公共头文件 |
sdologinsdk.lib、sdologinsdk64.lib | 静态库文件(如使用静态库) |
sdologinsdk.dll、sdologinsdk64.dll | 动态库运行时文件 |
sdologinsdk.lib、sdologinsdk64.lib | DLL 的 import 库(隐式链接时用) |
✅ 六、宏设置汇总
使用方式 | 推荐设置 |
---|---|
静态链接 | #define GHOME_STATIC |
DLL 编译 | #define GHOME_EXPORTS |
DLL 调用 | 不定义宏(默认导入) |
动态加载 DLL | 不定义宏,自定义函数指针 |