Files
dnf-utils/ace_test/aClient/iigw_api_client.h
T
2025-12-06 16:42:21 +08:00

581 lines
23 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/************************************************************
Copyright (C), 2008-2018, Tencent Tech. Co., Ltd.
FileName: iigw_api_client.h
Author: cooperli Version : 1.0 Date: 2008-03-25
Description: 信息网关API头文件
History:
<author> <time> <version > <desc>
cooperli 2008-03-27 1.0 build
***********************************************************/
#ifndef _ITC_CLIENT_H_
#define _ITC_CLIENT_H_
// VC动态库
#ifdef iigw_client_api_EXPORTS
#define IIGW_DLL_EXPORT __declspec(dllexport)
#else
#define IIGW_DLL_EXPORT
#endif
#ifdef __cplusplus
extern "C"
{
#endif
#define SVR_PROT 5692 // IIGW SERVER 的端口
#define INFOGW_MAX_MSG_LEN 2048 // 最大消息长度为512 BYTE
#define INFOGW_MAX_TO_GAME_SVR_STR_LEN 256 // 最大送到GAME SERVER的串长度为256 BYTE
#define INFOGW_MIN_ERR_BUF_LEN 256 // 最小消息长度为256 BYTE
#define INFOGW_OPEN_ID_LEN 64
// 消息类型定义INFOGW_MSG_TYPE
enum
{
INFOGW_MSG_TYPE_REQ = 1, // 请求消息
INFOGW_MSG_TYPE_ACK = 2, // 回应消息
INFOGW_MSG_TYPE_BOTTOM // 底部,无效值
};
// 消息错误类型定义
enum IIGW_MSG_STATUS
{
IIGW_MSG_STATUS_OK = 0, // 正确消息
IIGW_MSG_STATUS_UNKNOWN_VER_ERR = 1, // MAGIC KEY出错
IIGW_MSG_STATUS_MSG_TYPE_ERR = 2, // 消息类型错误
IIGW_MSG_STATUS_OPT_ERR = 3, // 业务类型出错
IIGW_MSG_STATUS_NO_RETURN = 4, // 没有收到对端的回应
IIGW_MSG_STATUS_CRYPT_LEN_ERR = 5, // TO GAME SVR的消息长度出错
IIGW_MSG_STATUS_MSG_LEN_ERR = 6, // 消息长度出错
IIGW_MSG_STATUS_BUF_LEN_ERR = 7, // 输入BUFFFER长度太少
IIGW_MSG_STATUS_RD_CFG_ERR = 8, // 读配置出错
IIGW_MSG_STATUS_CONNECT_ERR = 9, // 连接出错
IIGW_MSG_STATUS_SENT_MSG_ERR = 10, // 发送消息出错
IIGW_MSG_STATUS_DNS_RESOLVE_ERR = 30, // DNS解释出错,不能把域名解释成IP
IIGW_MSG_STATUS_PARSE_RSP_ERR = 11, // 解析返回包出错
IIGW_MSG_STATUS_PARA_ERR = -1, // 参数出错
// 服务端发现的错误lix
IIGW_MSG_STATUS_UNKNOWN_VER_ERR_R = 101, // MAGIC KEY出错
IIGW_MSG_STATUS_MSG_TYPE_ERR_R = 102, // 消息类型错误
IIGW_MSG_STATUS_OPT_ERR_R = 103, // 业务类型出错
IIGW_MSG_STATUS_HEARD_LEN_ERR_R = 104, // 消息协议头长度出错
IIGW_MSG_STATUS_OPT_LEN_ERR = 105, // 业务信息长度出错
IIGW_MSG_STATUS_OPT_COUNT_ERR = 106, // 业务信息长度出错
IIGW_MSG_STATUS_NET_ERR_R = 107, // 网络通讯出错
IIGW_MSG_STATUS_RES_LIMIT_R = 110, // 资源受限
IIGW_MSG_STATUS_BJ_NEW_USER = 200, // CF !!! 北京新用户,禁止登陆
IIGW_MSG_STATUS_NETBAR_PC = 256, // 是网吧机器
IIGW_MSG_STATUS_NOT_IN_NETBAR = 300, // 非网吧环境
IIGW_MSG_STATUS_NOT_A_CHINESE_OS = 301, // 非中文操作系统
IIGW_MSG_STATUS_VMP_CRC_ERROR = 400,
IIGW_MSG_STATUS_VMP_DEBUG_ERROR = 401,
IIGW_MSG_STATUS_OS_SEH_ERROR = 402,
IIGW_MSG_STATUS_CPP_SEH_ERROR = 403,
IIGW_MSG_STATUS_UNKNOW_ERROR = 404,
IIGW_MSG_STATUS_BOTTOM // 底部,无效值
};
// 业务ID定义 INFOGW_OPERATION_ID
enum
{
INFOGW_OPERATION_CF = 10, // CF查询网吧等级业务ID
INFOGW_OPERATION_DNF = 20, // DNF查询网吧等级业务ID
INFOGW_OPERATION_ID_BOTTOM // 底部,无效值
};
typedef unsigned int UINT;
typedef struct infoGWReqMsgHeader_st
{
UINT uiVersion; // 版本号,认证头
UINT uiMsgType; // 消息类型,可以表示客户端消息,服务后台消息等
UINT uiSeqNo; //
UINT uiTime; // 本地时间戳
UINT uiOperationId; // 查询的业务类型 .参看 enum INFOGW_OPERATION_ID
UINT uiStatus; // 当为接收的信息时有效
UINT uiMsgBodyLen; // 业务消息长度
} INFOGW_INTF_CLIENT_MSG_HEADER;
typedef struct infoGWReqMsg_st
{
INFOGW_INTF_CLIENT_MSG_HEADER stMsgHd;
char szMsgBody[INFOGW_MAX_MSG_LEN]; // 业务相关消息体
} INFOGW_INTF_CLIENT_MSG;
typedef struct infoGWReqNetbarLv_st
{
unsigned int uiUni;
unsigned int ulNetbarIP;
} INFOGW_REQ_NETBAR_LV;
typedef struct infoGWReqNetbarLvOpenid_st
{
unsigned int uiType;
char open_id[INFOGW_OPEN_ID_LEN];
unsigned int ulNetbarIP;
} INFOGW_REQ_NETBAR_LV_OPENID;
// TO GAME SERVER 的的加密串的明文结构
typedef struct IIGWNetbar_st
{
unsigned int ulInfoGWTimeStamp; // 时间截
unsigned int uiUni; // QQ号码
unsigned int ulNetbarIP; // 网吧ip
unsigned char ucNetbarLv; // 网吧等级
//unsigned int ulNetbarLv; // 网吧等级v2
unsigned char ucCreditRank; // 荣誉等级
unsigned char ucTeamRank; // 战队等级
unsigned char ucVIP; // 会员VIP
unsigned char ucCampaign; // 活动
unsigned char ucReserve[15]; // 备用
} INFOGW_NETBAR;
//==============================================================
#define IIGE_MAX_OP_COUNT 15 // 批量查询每次查询的最大业务数量
#define IIGW_CRYPT_BUF_LEN 128 // 批量查询返回加密串缓存区长度
typedef struct IIGW_OPERATIONS
{
int count;
unsigned int uiOperationId[IIGE_MAX_OP_COUNT];
} INFOGW_OPIDS;
typedef struct IIGW_NETBAR_INFO_
{
unsigned int uiOperationId;
int iStatus; // 返回状态:1-正常,0-非正常
unsigned int ucCryptBufLen;
unsigned char szCryptBuf[IIGW_CRYPT_BUF_LEN];
} IIGW_NETBAR_INFO;
typedef struct IIGW_NETBAR_INFO_BATCH_ {
int count;
IIGW_NETBAR_INFO stNetbarInfo[IIGE_MAX_OP_COUNT];
} IIGW_NETBAR_INFO_BATCH;
//==============================================================
/*************************************************
Function: INFOGW_api_req_netbar_lv
Description: 请求查询网吧等级,并等待回应的加密包
Calls: INFOGW_api_set_server
INFOGW_send_recv
Called By: API 外部调用
Table Accessed: NONE
Table Updated: NONE
Input:
const int uiOperationId, -- 业务代码(不同的游戏有不同的业务代码)
unsigned long uiUni, -- QQ号码
const char *cIP, -- 网吧IP
const unsigned char *ticketBuf, -- TGP票据,若不需要填空
const int ticketLen, -- TGP票据长度,若不需要填0
unsigned long errBufLen -- error 的BUFFER大小:不应少于256
INOUT
int *bufLen, -- 输入是ack_buf的最大长度,不应少于256,输出是响应数据长度
Output:
void *cryptInfoBuf, -- 响应数据的BUFFER地址
void *error -- 错误描述的BUFFER地址,输入时BUFFER必需清空,不应少于256
Return: 返回0成功,其它为错误码,在iigw_api_client.h enum IIGW_MSG_STATUS中定义
History:
<author> <time> <version > <desc>
anselyang 2008-03-25 1.0 build
*************************************************/
int IIGW_DLL_EXPORT INFOGW_api_req_netbar_lv
(
const int uiOperationId, // 业务代码
unsigned long uiUni, // QQ No.
const char *cIP, // netbar ip addr. eg: 192.168.1.1
const unsigned char *ticketBuf, // TGP票据,若不需要填空
const int ticketLen, // TGP票据长度,若不需要填0
unsigned char *cryptInfoBuf, // output crypt info. . include: netbar level, netbar ip , infoGW's timestamp
int *bufLen, // crypt info. len
char *error, // error print char
unsigned long errBufLen // error buffer size
);
/*************************************************
Function: INFOGW_api_req_netbar_lv_ext
Description: 请求查询网吧等级,并等待回应的加密包 CF活动是否弹出
Calls: INFOGW_api_set_server
INFOGW_send_recv
Called By: API 外部调用
Table Accessed: NONE
Table Updated: NONE
Input:
const int uiOperationId, -- 业务代码(不同的游戏有不同的业务代码)
unsigned long uiUni, -- QQ号码
const char *cIP, -- 网吧IP
const unsigned char *ticketBuf, -- TGP票据,若不需要填空
const int ticketLen, -- TGP票据长度,若不需要填0
unsigned long errBufLen -- error 的BUFFER大小:不应少于256
INOUT
int *bufLen, -- 输入是ack_buf的最大长度,不应少于256,输出是响应数据长度
Output:
void *cryptInfoBuf, -- 响应数据的BUFFER地址
void *error -- 错误描述的BUFFER地址,输入时BUFFER必需清空,不应少于256
char *op_buf, -- 其他可选BUF 只给CF 活动用 stMsgHd.uiSeqNo
int *op_buf_len -- 其他可选BUF 长度 只给CF 活动用 stMsgHd.uiSeqNo
Return: 返回0成功,其它为错误码,在iigw_api_client.h enum IIGW_MSG_STATUS中定义
History:
<author> <time> <version > <desc>
anselyang 2009-07-14 1.0 build
*************************************************/
int IIGW_DLL_EXPORT INFOGW_api_req_netbar_lv_ext
(
const int uiOperationId, // 业务代码
unsigned long uiUni, // QQ No.
const char *cIP, // netbar ip addr. eg: 192.168.1.1
const unsigned char *ticketBuf, // TGP票据,若不需要填空
const int ticketLen, // TGP票据长度,若不需要填0
unsigned char *cryptInfoBuf, // output crypt info. . include: netbar level, netbar ip , infoGW's timestamp
int *bufLen, // crypt info. len
char *error, // error print char
unsigned long errBufLen, // error buffer size
char *op_buf, // 其他可选BUF 只给CF 活动用 stMsgHd.uiSeqNo
int *op_buf_len // 其他可选BUF 长度 只给CF 活动用 stMsgHd.uiSeqNo
);
/*************************************************
Function: INFOGW_api_req_platinum_netbar_lv
Description: 请求查询铂金网吧等级
Input:
const int uiOperationId, -- 业务代码(不同的游戏有不同的业务代码)
unsigned long uiUni, -- QQ号码,没有可填0
Output:
int &level, -- 铂金网吧等级
Return: 返回0成功,其它为错误码,在iigw_api_client.h enum IIGW_MSG_STATUS中定义
History:
<author> <time> <version > <desc>
cooperli 2016-11-29 1.0 build
*************************************************/
int IIGW_DLL_EXPORT INFOGW_api_req_platinum_netbar_lv
(
const int uiOperationId, // 业务代码
unsigned long uiUni, // QQ No.
int &level // 铂金网吧等级
);
/*************************************************
Function: INFOGW_api_req_platinum_netbar_lv_ext
Description: 请求查询铂金网吧等级
Input:
const int uiOperationId, -- 业务代码(不同的游戏有不同的业务代码)
unsigned long uiUni, -- QQ号码,没有可填0
unsigned int zone_id, -- 游戏大区,没有可填0
Output:
int &level, -- 铂金网吧等级
Return: 返回0成功,其它为错误码,在iigw_api_client.h enum IIGW_MSG_STATUS中定义
History:
<author> <time> <version > <desc>
cooperli 2016-11-29 1.0 build
*************************************************/
int IIGW_DLL_EXPORT INFOGW_api_req_platinum_netbar_lv_ext
(
const int uiOperationId, // 业务代码
unsigned long uiUni, // QQ No.
unsigned int zone_id, //游戏大区
int &level // 铂金网吧等级
);
/*************************************************
Function: INFOGW_api_req_netbar_lv_ext_with_zone_id
Description: 请求查询网吧等级,并等待回应的加密包 CF活动是否弹出
Calls: INFOGW_api_set_server
INFOGW_send_recv
Called By: API 外部调用
Table Accessed: NONE
Table Updated: NONE
Input:
const int uiOperationId, -- 业务代码(不同的游戏有不同的业务代码)
unsigned long uiUni, -- QQ号码
unsigned long zone_id, -- 大区ID
const char *cIP, -- 网吧IP
const unsigned char *ticketBuf, -- TGP票据,若不需要填空
const int ticketLen, -- TGP票据长度,若不需要填0
unsigned long errBufLen -- error 的BUFFER大小:不应少于256
INOUT
int *bufLen, -- 输入是ack_buf的最大长度,不应少于256,输出是响应数据长度
Output:
void *cryptInfoBuf, -- 响应数据的BUFFER地址
void *error -- 错误描述的BUFFER地址,输入时BUFFER必需清空,不应少于256
char *op_buf, -- 其他可选BUF 只给CF 活动用 stMsgHd.uiSeqNo
int *op_buf_len -- 其他可选BUF 长度 只给CF 活动用 stMsgHd.uiSeqNo
Return: 返回0成功,其它为错误码,在iigw_api_client.h enum IIGW_MSG_STATUS中定义
History:
<author> <time> <version > <desc>
cooperli 2017-01-19 1.0 build
*************************************************/
int IIGW_DLL_EXPORT INFOGW_api_req_netbar_lv_ext_with_zone_id
(
const int uiOperationId, // 业务代码
unsigned long uiUni, // QQ No.
unsigned int zone_id, // 游戏大区.
const char *cIP, // netbar ip addr. eg: 192.168.1.1
const unsigned char *ticketBuf, // TGP票据,若不需要填空
const int ticketLen, // TGP票据长度,若不需要填0
unsigned char *cryptInfoBuf, // output crypt info. . include: netbar level, netbar ip , infoGW's timestamp
int *bufLen, // crypt info. len
char *error, // error print char
unsigned long errBufLen, // error buffer size
char *op_buf, // 其他可选BUF 只给CF 活动用 stMsgHd.uiSeqNo
int *op_buf_len, // 其他可选BUF 长度 只给CF 活动用 stMsgHd.uiSeqNo
const int time_out=5000 // 阻塞时间,单位->毫秒,范围1~10000,默认值为5000
);
//////////////////////////////////////////////////////////////////////////
/** QQ网吧插件接口*/
namespace iepm_qqwb{
enum account_type{
at_qq, //0
at_wechart, // 1
at_facebook, //2
at_email, // 3
at_steam, //4
at_gopenid,//5
at_topenid, // 6 手机号对应的openid
};
/**
* @brief NetbarLv QQ网吧签名结构体
* @param tokenBuf 用来存放QQ网吧签名的buff
* @param tokenLen QQ网吧签名的长度
* @param ip PC的ip地址
* @param macs PC的mac地址列表
* @param macSize PC的mac地址个数
*/
struct NetbarLv {
unsigned char tokenBuff[1024];
int tokenLen;
char ip[32];
char macs[128];
int macSize;
};
/**
* @brief notify_req_netbarlv_result 回调函数,返回获取签名的结果和内容
* @param game_id 游戏ID
* @param zone_id 登录游戏的大区号
* @param open_id 用户登录游戏的open_id
* @param ret_code 获取签名的结果,返回0成功,其他为错误码,参考enum IIGW_MSG_STATUS中定义
* @param netbarlv NetbarLv信息,当ret_code=0时返回
*/
typedef void(*notify_req_netbarlv_result)(
unsigned int game_id,
unsigned int zone_id,
const char open_id[INFOGW_OPEN_ID_LEN],
int ret_code,
NetbarLv *netbarlv
);
struct IQQNetbarIIGWPlugin{
/**
* @brief 获取网吧机器信息
* @param game_id 游戏ID,由网吧项目组这边分配
* @param uin 用户登录游戏的QQ号
* @param zone_id 登录游戏的大区号
* @param cryptInfoBuf 用来存放网吧机器信息的加密串
* @param bufLen 加密串长度
* @param time_out 阻塞时间,单位->毫秒,范围1~10000 ,默认值为5000
* @return int 返回0成功,其他为错误码,参考enum IIGW_MSG_STATUS中定义
*/
virtual int GetNetbarMachineContent(
unsigned int game_id,
unsigned int uin,
unsigned int zone_id,
unsigned char *cryptInfoBuf,
int *bufLen,
const int time_out=5000
) = 0;
/**
* @brief 获取机器是否在网吧
* @param open_id 用户登录游戏的open_id,最大长度64
* @param type open_id帐号类型,参考account_type,0是QQ号,1是微信,2是facebook,3是邮箱账号,4是steam账号
* @return int 返回IIGW_MSG_STATUS_NETBAR_PC表示是网吧机器, IIGW_MSG_STATUS_NOT_IN_NETBAR表示非网吧机器,其他为错误码
*/
virtual int IsNetbarMachine(unsigned int game_id,
const char open_id[INFOGW_OPEN_ID_LEN],
account_type type) = 0;
/**
* @brief 获取机器是否在网吧,该接口仅为pubg使用
* @return bool 返回true表示在网吧
*/
virtual int IsNetbarMachine() = 0;
/**
* @brief ReqNetbarLv 获取网吧等级
* @param game_id 游戏ID,由网吧项目组这边分配(对应老接口的uiOperationId)
* @param zone_id 登录游戏的大区号
* @param open_id 用户登录游戏的open_id,最大长度64
* @param ticketBuf, TGP票据,若不需要填空
* @param ticketLen, TGP票据长度,若不需要填0
* @param cryptInfoBuf 用来存放网吧机器信息的加密串
* @param bufLen 加密串长度
* @param error, 错误的msg
* @param errBufLen, error buffer size
* @param op_buf, 其他可选BUF 只给CF 活动用 stMsgHd.uiSeqNo
* @param op_buf_len, 其他可选BUF 长度 只给CF 活动用 stMsgHd.uiSeqNo
* @param time_out 阻塞时间,单位->毫秒,范围1~10000,默认值为5000
* @param type 保留字段,open_id帐号类型,0是QQ号,1是微信,【2是facebook,3是邮箱账号,这2个都是wegame自己的opend_id】
* @return int 返回0成功,其他为错误码,参考enum IIGW_MSG_STATUS中定义
*/
virtual int ReqNetbarLv(
unsigned int game_id,
unsigned int zone_id,
const char open_id[INFOGW_OPEN_ID_LEN],
const unsigned char *ticketBuf,
const int ticketLen,
unsigned char *cryptInfoBuf,
int *bufLen,
char *error,
unsigned long errBufLen,
char *op_buf,
int *op_buf_len,
const int time_out=5000,
unsigned int type = 1
) = 0;
/**
* @brief ReqNetbarLv2 获取网吧等级
* @param game_id 游戏ID,由网吧项目组这边分配(对应老接口的uiOperationId)
* @param zone_id 登录游戏的大区号
* @param open_id 用户登录游戏的open_id,最大长度64
* @param type open_id帐号类型,0是QQ号,1是微信,2是facebook,3是邮箱账号,4是msdk的gopen_id
* @param ticketBuff, 用户登录游戏时的token,用于登录校验
* @param ticketLen, 用户登录游戏时的token长度
* @param netbarlv 输出参数,参考NetbarLv的声明
* @param time_out 阻塞时间,单位->毫秒,范围1~10000,默认值为5000
* @return int 返回0成功,其他为错误码,参考enum IIGW_MSG_STATUS中定义
*/
virtual int ReqNetbarLv2(
unsigned int game_id,
unsigned int zone_id,
const char open_id[INFOGW_OPEN_ID_LEN],
unsigned int type,
const char *ticketBuff,
const int ticketLen,
NetbarLv *netbarlv,
const int time_out = 5000
) = 0;
/**
* @brief 获取机器是否在网吧,给PUBG用的接口,其他业务请调用IsNetbarMachine
* @param open_id 用户登录游戏的open_id,最大长度64
* @param type open_id帐号类型,参考account_type,0是QQ号,1是微信,2是facebook,3是邮箱账号,4是steam账号
* @return bool 返回true表示在网吧
*/
virtual int IsNetbar_ForPubg(const char open_id[INFOGW_OPEN_ID_LEN], account_type type) = 0;
/**
* @brief 获取网吧签名token,给PUBG用的接口
* @param open_id 用户登录游戏的open_id,最大长度64
* @param type open_id帐号类型,参考account_type,0是QQ号,1是微信,2是facebook,3是邮箱账号,4是steam账号
* @param opt_token 存储token用的buff,建议长度512
* @param opt_token_len 返回的token 长度
* @return int 返回0成功,返回IIGW_MSG_STATUS_NOT_IN_NETBAR(300)表示非网吧环境,并且opt_token会为空,
其他为错误码,参考enum IIGW_MSG_STATUS中定义
*/
virtual int ReqNetbarToken_ForPubg(const char open_id[INFOGW_OPEN_ID_LEN], account_type type,
char *opt_token, int *opt_token_len) = 0;
/*************************************************
Function: SetProxy
Description: 设置代理,在所有获取等级接口之前调用
History:
<author> <time> <version > <desc>
cooperli 2019-6-11 1.0 build
*************************************************/
virtual void SetProxy(
const char url[INFOGW_OPEN_ID_LEN], // 代理URL
const char user[INFOGW_OPEN_ID_LEN], // 代理账号
const char pwd[INFOGW_OPEN_ID_LEN] // 代理密码
) = 0;
/**
* @brief RegNetbarLvCallback 注册异步获取网吧等级的回调函数,只需调用一次
* @param handle_result 回调函数
* @return int 返回0成功,其他为错误码,参考enum IIGW_MSG_STATUS中定义
*/
virtual int RegNetbarLvCallback(notify_req_netbarlv_result handle_result) = 0;
/**
* @brief ReqNetbarLv2_Asyn 异步获取网吧等级,调用该函数之前需调用RegNetbarLvCallback注册回调
* @param game_id 游戏ID,由网吧项目组这边分配(对应老接口的uiOperationId)
* @param zone_id 登录游戏的大区号
* @param open_id 用户登录游戏的open_id,最大长度64
* @param type open_id帐号类型,0是QQ号,1是微信,2是facebook,3是邮箱账号,4是msdk的gopen_id
* @param ticketBuff, 用户登录游戏时的token,用于登录校验
* @param ticketLen, 用户登录游戏时的token长度
* @param time_out 阻塞时间,单位->毫秒,范围1~10000,默认值为5000
* @return int 返回0成功,其他为错误码,参考enum IIGW_MSG_STATUS中定义
*/
virtual int ReqNetbarLv2_Asyn(
unsigned int game_id,
unsigned int zone_id,
const char open_id[INFOGW_OPEN_ID_LEN],
unsigned int type,
const char *ticketBuff,
const int ticketLen,
const int time_out = 5000
) = 0;
};
/**
* @brief 创建QQ网吧插件接口
* @param hDll LoadLibrary返回的HMODULE
* @return IQQNetbarIIGWPlugin 失败返回nullptr。该接口内存由插件管理,无需外部释放
*/
inline IQQNetbarIIGWPlugin *CreateQQNetbarIIGWPlugin(HMODULE hDll){
if (!hDll) {
return nullptr;
}
typedef HRESULT (WINAPI *QUERYPLUGININTERFACE)(const char*, void**);
#ifdef _WIN64
QUERYPLUGININTERFACE qpi = (QUERYPLUGININTERFACE)GetProcAddress(hDll,
"QueryPluginInterface");
#else
QUERYPLUGININTERFACE qpi = (QUERYPLUGININTERFACE)GetProcAddress(hDll,
"_QueryPluginInterface@8");
#endif
if (qpi) {
IQQNetbarIIGWPlugin* plugin = nullptr;
HRESULT hresult = qpi("IQQNetbarIIGWPlugin", reinterpret_cast<void**>(&plugin));
if (SUCCEEDED(hresult)) {
return plugin;
}
}
return nullptr;
}
}
#ifdef __cplusplus
}
#endif
#endif // _ITC_CLIENT_H_