关于易语言调用C++DLL接口

前几天接了个单,本以为应该挺容易的。可是硬是没弄过去,客户可能着急用。我是没联系上了。
就简单的调用DLL接口,批量查询账号信息

接口调用说明

1. 创建对象
void* __stdcall GameWxqp_CreateObject();
功能:创建对象接口,后续所以接口工作都基于此对象进行。此接口返回一个核心对象指针,每个账号对应一个对象。可以每个账号用一个线程进行工作,创建对象就放在线程函数中进行。每一个对象不可跨线程使用。
参数:无
返回值:成功则返回一个核心对象指针,失败返回0
2. 连接认证
int __stdcall GameWxqp_ConnectAuth(void* pObject, int code, unsigned char *pResult);
参数:pObject:GameWxqp_CreateObject返回的核心对象值。
Code:服务器返回的认证码
pResult:用来存储需要发送的数据的缓冲区,可以分配1024字节
返回值:要发送的数据长度

3. 心跳
int __stdcall GameWxqp_Heart(void* pObject, unsigned char* pResult);
功能:心跳数据,每5秒发送一个心跳请求。
参数:pObject:GameWxqp_CreateObject返回的核心对象值。
pResult:用来存储需要发送的数据的缓冲区,可以分配1024字节
返回值:要发送的数据长度

4. 登录
int __stdcall GameWxqp_Login(
void* pObject,
const char* pAccount,
const char* pPassword,
const char* pMachineCode,
const char* pIP,
unsigned char *pResult);
功能:登录接口。
参数:pObject:GameWxqp_CreateObject返回的核心对象值。
pAccount:账号
pPassword:密码
pMachineCode:机器码,32个字符,注意是大写,可以随机取 样本 “E5AF77DE87604155CD3465A957C22132”
pIP:ip地址
pResult:用来存储需要发送的数据的缓冲区,可以分配1024字节

返回值:要发送的数据长度
5. 绑定银行卡
int __stdcall GameWxqp_BindBank(void* pObject, const char* pBankCard, const char* pRealName, const char* pBankAddr, const char* pBankName, unsigned char *pResult);
功能:绑定银行卡。
参数:pObject:GameWxqp_CreateObject返回的核心对象值。
pBankCard:银行卡号
pRealName:姓名
pBankAddr:开户行地址
pBankName:银行名称 如中国工商银行,则填”ICBC”
pResult:用来存储需要发送的数据的缓冲区,可以分配1024字节

银行名称对照表:
中国工商银行 “ICBC”
中国农业银行 “ABC”
中国银行 “BOC”
中国建设银行 “CCB”
交通银行 “COMM”
招商银行 “CMB”
中信银行 “CITIC”
中国民生银行 “CMBC”
华夏银行 “HXB”
中国邮政储蓄银行 “PSBC”
浦发银行 “SPDB”
兴业银行 “CIB”
中国光大银行 “CEB”
返回值:要发送的数据长度

6. 绑定支付宝
int __stdcall GameWxqp_BindAliPay(void* pObject, const char* pAccount, const char* pRealName, unsigned char *pResult);
参数:pObject:GameWxqp_CreateObject返回的核心对象值。
pAccount:支付宝账号
pRealName:支付宝姓名
pResult:用来存储需要发送的数据的缓冲区,可以分配1024字节
返回值:要发送的数据长度
7. 兑换金币
int __stdcall GameWxqp_Exchange(void* pObject, int nCoin, int nType, unsigned char *pResult);
功能:兑换接口。
参数:pObject:GameWxqp_CreateObject返回的核心对象值。
nCoin:兑换金额
nType:1:支付宝兑换 2:银行卡兑换
pResult:用来存储需要发送的数据的缓冲区,可以分配1024字节
返回值:要发送的数据长度

8. 解析服务器返回数据
int __stdcall GameWxqp_ParseResponse(void* pObject, unsigned char* pData, int nSize, char* pResult);

功能:收到服务器返回的每一个完整数据包都要调用此接口进行解析,然后根据返回值就行相应处理。
参数:pObject:GameWxqp_CreateObject返回的核心对象值。
pData:服务器返回的完整数据
nSize:服务器返回的完整数据长度
pResult:获存储解析结果缓存区,可以分配1024字节,结果内容为json格式
返回值:0:解析错误 1:解析成功 2:此数据忽略不处理

解析服务器返回json数据解释如下:
【连接认证码】
{
“cmd”:2, // 连接认证码命令
“code”:0, // 0 成功 1失败
“authcode”:32434, // 认证码
}
【连接认证】
{
“cmd”:3, // 连接认证命令
“code”:0, // 0 成功 1失败
}
【登录消息】
{
“cmd”:4, // 登录命令
“code”:0, // 0 成功 1失败
}
【用户信息】
{
“cmd”:5, // 登录命令
“code”:0, // 0 成功 1失败
“bindalipay”:0, // 0 未绑定支付宝 1 已绑定支付宝
“bindbank”:0 // 0 未绑定银行卡 1 已绑定银行卡
}

【金币信息】
{
“cmd”:6, // 金币信息
“code”:0, // 0 成功 1失败
“gold”:38300 // 金币
}

【绑定银行卡结果】
{
“cmd”:7, // 绑定银行卡
“code”:0, // 0 成功 1失败
}
【绑定支付宝结果】
{
“cmd”:8, // 绑定银行卡
“code”:0, // 0 成功 1失败
}
【兑换结果】
{
“cmd”: 9, // 兑换金币命令
“code”: 0, // 0 成功 1失败
}
9. 释放对象
void __stdcall GameWxqp_DeleteObject(void* pObject);
功能:释放对象。
参数:pObject:GameWxqp_CreateObject返回的核心对象值。
返回值:无

易语言DLL接口部分

.版本 2

.DLL命令 GameWxqp_CreateObject, 长整数型, “GameWxqp.dll”, “GameWxqp_CreateObject”

.DLL命令 GameWxqp_Heart, 长整数型, “GameWxqp.dll”, “GameWxqp_Heart”
.参数 pObject, 整数型, 传址
.参数 pResult, 字节集, 传址

.DLL命令 GameWxqp_Login, 整数型, “GameWxqp.dll”, “GameWxqp_Login”
.参数 pObject, 整数型, 传址
.参数 pAccount, 字节集, 传址
.参数 pPassword, 字节集, 传址
.参数 pMachineCode, 字节集, 传址
.参数 pIP, 字节集, 传址
.参数 pResult, 字节集, 传址

.DLL命令 GameWxqp_ConnectAuth, 整数型, “GameWxqp.dll”, “GameWxqp_ConnectAuth”
.参数 pObject, 整数型, 传址
.参数 code, 整数型
.参数 pResult, 字节集, 传址

.DLL命令 GameWxqp_ParseResponse, 整数型, “GameWxqp.dll”, “GameWxqp_ParseResponse”
.参数 pObject, 整数型, 传址
.参数 pData, 字节集, 传址
.参数 nSize, 整数型
.参数 pResult, 文本型, 传址

其中调用Login部分的时候软件崩溃。没想明白位什么

因为按照客户提供的接口来看
int __stdcall GameWxqp_Login(
void* pObject,
const char* pAccount,
const char* pPassword,
const char* pMachineCode,
const char* pIP,
unsigned char *pResult);

const char*对应字节集数据传址应该没没有任何问题的,软件就是蹦
把易语言的数据类型都试个遍了还是不行,方法肯定有其他方法的。但是太耗时间
由于还是半夜12点联系我的。折腾了几个小时无果。睡觉凉一边了。

发表评论

邮箱地址不会被公开。 必填项已用*标注