调整腾讯网吧特权组件位置

This commit is contained in:
2025-12-06 16:56:24 +08:00
parent b38ad590a9
commit baf547c71d
6 changed files with 71 additions and 1 deletions
+580
View File
@@ -0,0 +1,580 @@
/************************************************************
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_