#ifndef BBY_INTERFACE_H
#define BBY_INTERFACE_H
#include <string>
//网络接口错误列表:
//错误列表:
// 00:成功
//-01:创建套接字失败,请检查您的网络是否正常连接
//-02:设置套接字超时失败
//-03:连接服务器失败,请检查您的网络是否正常连接
//-04:发送数据失败,请检查您的网络是否正常连接
//-05:服务器连接已断开,接收数据失败
//-06:云应用未运行
//-07:云应用不存在
//-08:权限不匹配
//-09:接口未注册
//-10:异常,包头错误1
//-11:异常,包头错误2
//-12:异常,包头错误3
//-13:异常,解密错误
//-14:异常,数据库连接失败
//-15:异常,执行存储过程失败
//-16:异常,内部错误1
//-17:异常,执行存储过程未知错误
//-18:异常,不是云服务器
//-19:异常,空指针
//-20:用户登录权限不通过(这里是作者自己判断的不通过)
//-21:请求超时
//-22:接收包的数据大小不正确
//-23:设置套接字模式失败
//-24:用户在其他地方登录
//-25:当前服务器在线人数已满,请稍后再试(添加用户信息到内存失败,可能是人数已满)
//-26:已经退出登录"
//-27:文件被占用,打开本地文件失败
//-28:云盘下载文件不存在
//-29:普通登录模式状态下,无法调用push登录,请先调用登出方法
//-30:push登录模式状态下,无法调用普通登录,请先调用登出方法
//-31:在线人数已满,请扩容在线人数
//-32:并发数已满,请扩容并发数"
//-33:文件不存在
//-34:文件大小超出限制
//-35:下载服务器繁忙,请稍后再试
//-36:上传目录不存在
//-37:不允许上传
//-38:不允许下载
//-39:云服务器磁盘已满
//下面为服务器错误
//-1001:云服务器内部错误,创建套接字失败
//-1002:云服务器内部错误,初始化IP地址失败
//-1003:云服务器内部错误,连接服务器失败
//-1004:云服务器内部错误,发送数据失败
//-1005:云服务器内部错误,接收数据失败
//-1006:云服务器内部错误,异常,空指针
//-1007:云服务器内部错误,服务器连接已断开,接收数据失败
//-1008:云服务器内部错误,套接字错误
//-1009:云服务器内部错误,包头错误1
//-1010:云服务器内部错误,包头错误2
//-1011:云服务器内部错误,包头错误3
//-1012:云服务器内部错误,解密错误
//-1013:云服务器内部错误,接收到的数据大小不正确
//-1014:云服务器内部错误,设置套接字超时失败
//-1015:云服务器内部错误,设置阻塞模式失败
//-1016:连接云应用服务器失败,可能是云应用未运行
//-1017:发送数据到云应用失败
//-1018:接收云应用数据失败
//-1019:云应用连接已断开,接收数据失败
//-1020:连接云应用套接字错误
//-1021:连接云应用包头错误1
//-1022:连接云应用包头错误2
//-1023:连接云应用包头错误3
//-1024:连接云应用解密错误
//-1025:从云应用接收到的数据大小不正确
//xxx:未知错误,请联系管理人员



/*
百宝云回调函数 原型
type  		消息类型 预留
chArg		从云应用中推送过来的消息
*/
typedef void (__stdcall *bbyCallBack)(int type,const char *chArg);

/*
百宝云回调函数 原型
type  		消息类型 预留
chArg		从云应用中推送过来的消息
chOutStr	将本地客户端的消息推送回给云应用
*/
typedef void (__stdcall *bbyCallBackEx)(int type,const char *chArg,char *chOutStr);

/*
百宝云回调函数 原型
type  		消息类型 预留
wchArg		从云应用中推送过来的消息
*/
typedef void (__stdcall *bbyCallBackW)(int type,const wchar_t *chArg);

/*
百宝云回调函数 原型
type  		消息类型 预留
wchArg		从云应用中推送过来的消息
wchOutStr	将本地客户端的消息推送回给云应用
*/
typedef void (__stdcall *bbyCallBackExW)(int type,const wchar_t *chArg,wchar_t *chOutStr);



/*
注册bby_callback回调函数,并设置为pushconnect登陆模式的回调函数,pushconnect登陆成功后云应用可以主动推送消息给客户端,一个进程只能设置一个
pFun				回调函数指针,函数原型为 bbyCallBack
返回值				设置成功,返回函数指针,失败返回NULL
*/
bbyCallBack		__stdcall msgcallback_push(bbyCallBack pFun);

/*
注册bby_callback回调函数,并设置为login登陆模式的回调函数,login登陆成功后云应用可以通过logintextmsg函数主动推送消息给客户端,一个进程只能设置一个
pFun				回调函数指针,函数原型为 bbyCallBack
返回值				设置成功,返回函数指针,失败返回NULL
*/
bbyCallBack		__stdcall msgcallback_login(bbyCallBack pFun);

/*
注册bby_callback回调函数,并设置为pushconnect登陆模式的回调函数,login登陆成功后云应用可以通过logintextmsgex函数主动推送消息给客户端,一个进程只能设置一个
pFun				回调函数指针,函数原型为 bbyCallBackEx
返回值				设置成功,返回函数指针,失败返回NULL
*/
bbyCallBackEx	__stdcall msgcallback_loginex(bbyCallBackEx pFun);

/*
注册bby_callback回调函数,并设置为pushconnect登陆模式的回调函数,pushconnect登陆成功后云应用可以主动推送消息给客户端,一个进程只能设置一个
pFun				回调函数指针,函数原型为 bbyCallBack
返回值				设置成功,返回函数指针,失败返回NULL
*/
bbyCallBackW		__stdcall msgcallback_pushW(bbyCallBackW pFun);

/*
注册bby_callback回调函数,并设置为login登陆模式的回调函数,login登陆成功后云应用可以通过logintextmsg函数主动推送消息给客户端,一个进程只能设置一个
pFun				回调函数指针,函数原型为 bbyCallBack
返回值				设置成功,返回函数指针,失败返回NULL
*/
bbyCallBackW		__stdcall msgcallback_loginW(bbyCallBackW pFun);

/*
注册bby_callback回调函数,并设置为pushconnect登陆模式的回调函数,login登陆成功后云应用可以通过logintextmsgex函数主动推送消息给客户端,一个进程只能设置一个
pFun				回调函数指针,函数原型为 bbyCallBackEx
返回值				设置成功,返回函数指针,失败返回NULL
*/
bbyCallBackExW	__stdcall msgcallback_loginexW(bbyCallBackExW pFun);

long			__stdcall reg(const char* account, const char* access_token);

/*
调用此接口,会响应对应云应用中的_commoninterface接口,此接口只要reg注册成功后,即可调用,网络超时默认60秒
chArg					向云应用发送的消息,消息长度不能超过16k
retBuff				云应用中_commoninterface事件函数返回的内容
nMaxCount			接收数据的最大长度
nTimeOut			设置网络请求超时时间,建议不低于60秒
返回值				返回0表示执行成功,其他值具体查看网络接口错误列表
*/ 
long			__stdcall commoninterface(const char* chArg, char* retBuff,unsigned int nMaxCount ,unsigned int nTimeOut);

/*
调用此接口,会响应对应云应用中的_userlogin接口,执行云脚本中的功能,返回对应的结果,网络超时60秒
chCustom			开发者定义的用户标记,对应云应用接口中_userlogin事件中的arg1,标记长度不能超过64字节,超过部分会自动截断,必须具有唯一性
chArg				开发者定义的用户标记1,对应云应用接口中_userlogin事件中的arg2,标记1长度不能超过16k,超出部分会自动被截断
retBuff				对应云应用_userlogin事件的out_ret参数,用于云应用中返回字符串内容
nMaxCount			接收数据的最大长度
返回值				返回0表示执行成功,其他值具体查看网络接口错误列表
*/
long			__stdcall login(const char* chCustom,const char* chArg, char* retBuff,unsigned int nMaxCount);

/*
把与云应用通讯相关的整型错误值翻译成字符型描述信息
nErrno				错误信息值
result				返回错误信息
nMaxCount			接收数据的最大长度
返回值				获取到错误信息返回真,失败返回假
*/
bool			__stdcall translateerr(long nErrno,char* result,unsigned int nMaxCount);

/*
下载云应用上的文件到本地
chInPath			云虚拟桌面中的文件路径,文件必须在 云系统/文件/下载/项目名/ 目录下,如果目录不存在,调用一次downloadfile函数,会自动创建对应的目录
chSavePath			本地文件存储的路径,目录必须存在,不会自动创建不存在的目录
返回值				返回0表示执行成功,其他值具体查看网络接口错误列表
*/
long			__stdcall downloadfile(const char* chInPath, const char* chSavePath);

/*
调用此接口,会响应对应云应用中的_userpush接口,执行云脚本中的功能,返回对应的结果,网络超时60秒
chCustom			开发者定义的用户标记,对应云应用接口中_userpush事件中的arg1,标记长度不能超过64字节,超过部分会自动截断,必须具有唯一性
chArg				开发者定义的用户标记1,对应云应用接口中_userpush事件中的arg2,标记1长度不能超过16k,超出部分会自动被截断
retBuff				对应云应用_userlogin事件的out_ret参数,用于云应用中返回字符串内容
nMaxCount			接收数据的最大长度
返回值				返回0表示执行成功,其他值具体查看网络接口错误列表
*/
long			__stdcall pushconnect(const char* chCustom,const char* chArg, char* retBuff,unsigned int nMaxCount);

/*
与云应用断开连接,并通知云应用客户端下线,云应用用户在线状态刷新时间为10分钟左右,网络超时60秒
参数				无
返回值				返回0表示执行成功,其他值具体查看网络接口错误列表
*/
long			__stdcall logout();

//
long			__stdcall md5(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall md5file(const char* strPath,char* result,unsigned int nMaxCount);
long			__stdcall sha1(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall sha224(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall sha256(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall sha384(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall sha512(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall sha1file(const char* strPath,char* result,unsigned int nMaxCount);
long			__stdcall sha224file(const char* strPath,char* result,unsigned int nMaxCount);
long			__stdcall sha256file(const char* strPath,char* result,unsigned int nMaxCount);
long			__stdcall sha384file(const char* strPath,char* result,unsigned int nMaxCount);
long			__stdcall sha512file(const char* strPath,char* result,unsigned int nMaxCount);
long			__stdcall crc32(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall crc32file(const char* strPath,char* result,unsigned int nMaxCount);
long			__stdcall adler32(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall adler32file(const char* strPath,char* result,unsigned int nMaxCount);
long			__stdcall tiger(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall tigerfile(const char* strPath,char* result,unsigned int nMaxCount);
long			__stdcall ripemd128(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall ripemd160(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall ripemd256(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall ripemd320(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall ripemd128file(const char* strPath,char* result,unsigned int nMaxCount);
long			__stdcall ripemd160file(const char* strPath,char* result,unsigned int nMaxCount);
long			__stdcall ripemd256file(const char* strPath,char* result,unsigned int nMaxCount);
long			__stdcall ripemd320file(const char* strPath,char* result,unsigned int nMaxCount);
long			__stdcall base64encode(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall base64decode(const char* str,char* result,unsigned int nMaxCount);
long			__stdcall base64encodefile( const char* file,char* result,unsigned int nMaxCount);
long			__stdcall base64decodefile( const char* str, const char* file);
long			__stdcall aesencrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
long			__stdcall aesdecrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
long			__stdcall desencrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
long			__stdcall desdecrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
long			__stdcall blowfishencrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
long			__stdcall blowfishdecrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
long			__stdcall rc2encrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
long			__stdcall rc2decrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
long			__stdcall rc5encrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
long			__stdcall rc5decrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
long			__stdcall rc6encrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
long			__stdcall rc6decrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
long			__stdcall teaencrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
long			__stdcall teadecrypt(const char* source, const char* key,char* result,unsigned int nMaxCount);
bool			__stdcall aesencryptfile(const char* oldsource, const char* newsource,const char* key);
bool			__stdcall aesdecryptfile(const char* oldsource, const char* newsource,const char* key);
bool			__stdcall desencryptfile(const char* oldsource, const char* newsource,const char* key);
bool			__stdcall desdecryptfile(const char* oldsource, const char* newsource,const char* key);
bool			__stdcall blowfishencryptfile(const char* oldsource, const char* newsource,const char* key);
bool			__stdcall blowfishdecryptfile(const char* oldsource, const char* newsource,const char* key);
bool			__stdcall teaencryptfile(const char* oldsource, const char* newsource,const char* key);
bool			__stdcall teadecryptfile(const char* oldsource, const char* newsource,const char* key);
bool			__stdcall rc2encryptfile(const char* oldsource, const char* newsource,const char* key);
bool			__stdcall rc2decryptfile(const char* oldsource, const char* newsource,const char* key);
bool			__stdcall rc5encryptfile(const char* oldsource, const char* newsource,const char* key);
bool			__stdcall rc5decryptfile(const char* oldsource, const char* newsource,const char* key);
bool			__stdcall rc6encryptfile(const char* oldsource, const char* newsource,const char* key);
bool			__stdcall rc6decryptfile(const char* oldsource, const char* newsource,const char* key);
long			__stdcall getmac(char* result,unsigned int nMaxCount);
bool			__stdcall generatersakey(const char* seed, char* priv,long nPrivMaxCount, char* pub,long nPubMaxCount, long key_length);
long			__stdcall rsaencrypt(const char* str, const char* pub,char* result,unsigned int nMaxCount);
long			__stdcall rsadecrypt(const char* str, const char* priv,char* result,unsigned int nMaxCount);

//json操作
long			__stdcall jsonparse(const char* json); //把json字符串转换成对象
long			__stdcall jsonfree(long json); //释放json对象 与 jsonparse 配对
long			__stdcall jsongettype(long jsonObject); //获取对象类型
long			__stdcall jsongetobjectvalue( long jsonObject, const char* chName,long &value);
long			__stdcall jsongetarrayvalue( long jsonObject, long index,long &value);
long			__stdcall jsongetat(long jsonObject ,long index,long &value,char* chName,unsigned int nMaxCount);
long			__stdcall jsongetsize( long jsonObject); //获取对象元素大小
long			__stdcall jsoncreate(); //创建一个空的对象
long			__stdcall jsontostring( long jsonObject,char* result,unsigned int nMaxCount); //js对象转字符串
long			__stdcall jsonpushint( long jsonObject ,const char* key,long value);
long			__stdcall jsonpushint64( long jsonObject ,const char* key,long long value);
long			__stdcall jsonpushuint( long jsonObject ,const char* key,unsigned long value);
long			__stdcall jsonpushuint64( long jsonObject ,const char* key,unsigned long long value);
long			__stdcall jsonpushstring( long jsonObject ,const char* key,const char* value);
long			__stdcall jsonpushbool( long jsonObject ,const char* key,long value);
long			__stdcall jsonpushdouble( long jsonObject ,const char* key,double value);
long			__stdcall jsonpushnull( long jsonObject ,const char* key);

long			__stdcall jsonarrayaddint( long jsonObject ,long value);
long			__stdcall jsonarrayaddint64( long jsonObject ,long long value);
long			__stdcall jsonarrayadduint( long jsonObject ,unsigned long value);
long			__stdcall jsonarrayadduint64( long jsonObject ,unsigned long long value);
long			__stdcall jsonarrayaddstring( long jsonObject ,const char* value);
long			__stdcall jsonarrayaddbool( long jsonObject ,long value);
long			__stdcall jsonarrayadddouble( long jsonObject ,double value);
long			__stdcall jsonarrayaddnull( long jsonObject );

long			__stdcall jsonpushobject( long jsonObject ,const char* key,long Childjsonobject);
long			__stdcall jsonarrayaddobject( long jsonObject ,long Childjsonobject);

int				__stdcall jsongetint(long jsonobject);
unsigned int	__stdcall jsongetuint(long jsonobject);
long long		__stdcall jsongetint64(long jsonobject);
unsigned long long __stdcall jsongetuint64(long jsonobject);
long			__stdcall jsongetstring(long jsonobject,char* result,unsigned int nMaxCount);
bool			__stdcall jsongetbool(long jsonobject);
double			__stdcall jsongetdouble(long jsonobject);
long			__stdcall jsongetnull(long jsonobject);

long			__stdcall ver(char* result,unsigned int nMaxCount);
long			__stdcall getlasterror(char* chRetBuff,unsigned int nMaxCount);


/*
注册用户,获取使用其他相关接口的权限,网络超时60秒
account				百宝云开发者会员中心的账号
access_token		云应用的token
返回值				返回0表示注册成功,其他值具体查看网络接口错误列表
*/
long			__stdcall regW(const wchar_t* account, const wchar_t* access_token);

/*
调用此接口,会响应对应云应用中的_commoninterface接口,此接口只要reg注册成功后,即可调用,网络超时默认60秒
chArg					向云应用发送的消息,消息长度不能超过16k
retBuff				云应用中_commoninterface事件函数返回的内容
nMaxCount			接收数据的最大长度
nTimeOut			设置网络请求超时时间,建议不低于60秒
返回值				返回0表示执行成功,其他值具体查看网络接口错误列表
*/ 
long			__stdcall commoninterfaceW(const wchar_t* chArg, wchar_t* retBuff,unsigned int nMaxCount ,unsigned int nTimeOut);

/*
调用此接口,会响应对应云应用中的_userlogin接口,执行云脚本中的功能,返回对应的结果,网络超时60秒
chCustom			开发者定义的用户标记,对应云应用接口中_userlogin事件中的arg1,标记长度不能超过64字节,超过部分会自动截断,必须具有唯一性
chArg				开发者定义的用户标记1,对应云应用接口中_userlogin事件中的arg2,标记1长度不能超过16k,超出部分会自动被截断
retBuff				对应云应用_userlogin事件的out_ret参数,用于云应用中返回字符串内容
nMaxCount			接收数据的最大长度
返回值				返回0表示执行成功,其他值具体查看网络接口错误列表
*/
long			__stdcall loginW(const wchar_t* chCustom,const wchar_t* chArg, wchar_t* retBuff,unsigned int nMaxCount);

/*
把与云应用通讯相关的整型错误值翻译成字符型描述信息
nErrno				错误信息值
result				返回错误信息
nMaxCount			接收数据的最大长度
返回值				获取到错误信息返回真,失败返回假
*/
bool			__stdcall translateerrW(long nErrno,wchar_t* result,unsigned int nMaxCount);

/*
下载云应用上的文件到本地
chInPath			云虚拟桌面中的文件路径,文件必须在 云系统/文件/下载/项目名/ 目录下,如果目录不存在,调用一次downloadfile函数,会自动创建对应的目录
chSavePath			本地文件存储的路径,目录必须存在,不会自动创建不存在的目录
返回值				返回0表示执行成功,其他值具体查看网络接口错误列表
*/
long			__stdcall downloadfileW(const wchar_t* chInPath, const wchar_t* chSavePath);

/*
调用此接口,会响应对应云应用中的_userpush接口,执行云脚本中的功能,返回对应的结果,网络超时60秒
chCustom			开发者定义的用户标记,对应云应用接口中_userpush事件中的arg1,标记长度不能超过64字节,超过部分会自动截断,必须具有唯一性
chArg				开发者定义的用户标记1,对应云应用接口中_userpush事件中的arg2,标记1长度不能超过16k,超出部分会自动被截断
retBuff				对应云应用_userlogin事件的out_ret参数,用于云应用中返回字符串内容
nMaxCount			接收数据的最大长度
返回值				返回0表示执行成功,其他值具体查看网络接口错误列表
*/
long			__stdcall pushconnectW(const wchar_t* chCustom,const wchar_t* chArg, wchar_t* retBuff,unsigned int nMaxCount);

/*
与云应用断开连接,并通知云应用客户端下线,云应用用户在线状态刷新时间为10分钟左右,网络超时60秒
参数				无
返回值				返回0表示执行成功,其他值具体查看网络接口错误列表
*/
long			__stdcall logoutW();

//
long			__stdcall md5W(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall md5fileW(const wchar_t* strPath,wchar_t* result,unsigned int nMaxCount);
long			__stdcall sha1W(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall sha224W(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall sha256W(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall sha384W(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall sha512W(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall sha1fileW(const wchar_t* strPath,wchar_t* result,unsigned int nMaxCount);
long			__stdcall sha224fileW(const wchar_t* strPath,wchar_t* result,unsigned int nMaxCount);
long			__stdcall sha256fileW(const wchar_t* strPath,wchar_t* result,unsigned int nMaxCount);
long			__stdcall sha384fileW(const wchar_t* strPath,wchar_t* result,unsigned int nMaxCount);
long			__stdcall sha512fileW(const wchar_t* strPath,wchar_t* result,unsigned int nMaxCount);
long			__stdcall crc32W(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall crc32fileW(const wchar_t* strPath,wchar_t* result,unsigned int nMaxCount);
long			__stdcall adler32W(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall adler32fileW(const wchar_t* strPath,wchar_t* result,unsigned int nMaxCount);
long			__stdcall tigerW(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall tigerfileW(const wchar_t* strPath,wchar_t* result,unsigned int nMaxCount);
long			__stdcall ripemd128W(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall ripemd160W(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall ripemd256W(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall ripemd320W(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall ripemd128fileW(const wchar_t* strPath,wchar_t* result,unsigned int nMaxCount);
long			__stdcall ripemd160fileW(const wchar_t* strPath,wchar_t* result,unsigned int nMaxCount);
long			__stdcall ripemd256fileW(const wchar_t* strPath,wchar_t* result,unsigned int nMaxCount);
long			__stdcall ripemd320fileW(const wchar_t* strPath,wchar_t* result,unsigned int nMaxCount);
long			__stdcall base64encodeW(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall base64decodeW(const wchar_t* str,wchar_t* result,unsigned int nMaxCount);
long			__stdcall base64encodefileW( const wchar_t* file,wchar_t* result,unsigned int nMaxCount);
bool			__stdcall base64decodefileW( const wchar_t* str, const wchar_t* file);
long			__stdcall aesencryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
long			__stdcall aesdecryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
long			__stdcall desencryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
long			__stdcall desdecryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
long			__stdcall blowfishencryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
long			__stdcall blowfishdecryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
long			__stdcall rc2encryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
long			__stdcall rc2decryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
long			__stdcall rc5encryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
long			__stdcall rc5decryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
long			__stdcall rc6encryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
long			__stdcall rc6decryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
long			__stdcall teaencryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
long			__stdcall teadecryptW(const wchar_t* source, const wchar_t* key,wchar_t* result,unsigned int nMaxCount);
bool			__stdcall aesencryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
bool			__stdcall aesdecryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
bool			__stdcall desencryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
bool			__stdcall desdecryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
bool			__stdcall blowfishencryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
bool			__stdcall blowfishdecryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
bool			__stdcall teaencryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
bool			__stdcall teadecryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
bool			__stdcall rc2encryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
bool			__stdcall rc2decryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
bool			__stdcall rc5encryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
bool			__stdcall rc5decryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
bool			__stdcall rc6encryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
bool			__stdcall rc6decryptfileW(const wchar_t* oldsource, const wchar_t* newsource,const wchar_t* key);
long			__stdcall getmacW(wchar_t* result,unsigned int nMaxCount);
bool			__stdcall generatersakeyW(const wchar_t* seed, wchar_t* priv,long nPrivMaxCount, wchar_t* pub,long nPubMaxCount, long key_length);
long			__stdcall rsaencryptW(const wchar_t* str, const wchar_t* pub,wchar_t* result,unsigned int nMaxCount);
long			__stdcall rsadecryptW(const wchar_t* str, const wchar_t* priv,wchar_t* result,unsigned int nMaxCount);

//json操作
long			__stdcall jsonparseW(const wchar_t* json); //把json字符串转换成对象
long			__stdcall jsongetobjectvalueW(long jsonObject, const wchar_t* chName,long &value);
long			__stdcall jsongetatW(long jsonObject ,long index,long &value,wchar_t* chName,unsigned int nMaxCount);
long			__stdcall jsontostringW(long jsonObject,wchar_t* result,unsigned int nMaxCount); //js对象转字符串
long			__stdcall jsonpushintW(long jsonObject ,const wchar_t* key,long value);
long			__stdcall jsonpushint64W(long jsonObject ,const wchar_t* key,long long value);
long			__stdcall jsonpushuintW(long jsonObject ,const wchar_t* key,unsigned long value);
long			__stdcall jsonpushuint64W(long jsonObject ,const wchar_t* key,unsigned long long value);
long			__stdcall jsonpushstringW(long jsonObject ,const wchar_t* key,const wchar_t* value);
long			__stdcall jsonpushboolW(long jsonObject ,const wchar_t* key,long value);
long			__stdcall jsonpushdoubleW(long jsonObject ,const wchar_t* key,double value);
long			__stdcall jsonpushnullW(long jsonObject ,const wchar_t* key);

long			__stdcall jsonarrayaddstringW(long jsonObject ,const wchar_t* value);
long			__stdcall jsonpushobjectW(long jsonObject ,const wchar_t* key,long Childjsonobject);

long			__stdcall jsongetstringW(long jsonobject,wchar_t* result,unsigned int nMaxCount);

long			__stdcall verW(wchar_t* result,unsigned int nMaxCount);
long			__stdcall getlasterrorW(wchar_t* chRetBuff,unsigned int nMaxCount);
long			__stdcall getstatus();
long			__stdcall getprogress(const char* chFilePath);
long			__stdcall getprogressW(const wchar_t* chFilePath);
long			__stdcall uploadfile(const char* inPath, const char* savePath);
long			__stdcall uploadfileW(const wchar_t* inPath, const wchar_t* savePath);
long			__stdcall uploadfileex(const char* inPath, const char* savePath,const char* arg);
long			__stdcall uploadfileexW(const wchar_t* inPath, const wchar_t* savePath,const wchar_t* arg);
long			__stdcall downloadfileex(const char* chInPath, const char* chSavePath,const char* arg);
long			__stdcall downloadfileexW(const wchar_t* chInPath, const wchar_t* chSavePath,const wchar_t* arg);

long			__stdcall jsoncopyobjectvalue( long jsonObject, const char* chName,long &value);
long			__stdcall jsoncopyarrayvalue( long jsonObject, long index,long &value);
long			__stdcall jsoncopyvalueat(long jsonObject ,long index,long &value,char* chName,unsigned int nMaxCount);
long			__stdcall jsoncopyobjectvalueW(long jsonObject, const wchar_t* chName,long &value);
long			__stdcall jsoncopyvalueatW(long jsonObject ,long index,long &value,wchar_t* chName,unsigned int nMaxCount);

long			__stdcall stopupload(const char* chFileName);
long			__stdcall stopdownload(const char* chFileName);
long			__stdcall stopuploadW(const wchar_t* chFileName);
long			__stdcall stopdownloadW(const wchar_t* chFileName);
long			__stdcall bbyreg(const char* access_token);
long			__stdcall bbyregW(const wchar_t* access_token);

//由于 commoninterface 返回数据长度不固定,此接口专门用于VC TC内部代码使用,执行成功后,请使用ReleaseDllString 释放指针
//chArg				向云应用发送的消息,消息长度不能超过16k
//ret			    返回0表示执行成功,其他值具体查看网络接口错误列表,由于不能直接使用std::wstring的问题,替换了参数位置
//nTimeOut			设置网络请求超时时间,建议不低于60秒
//返回值			云应用中_commoninterface事件函数返回的内容,由于在返回数据是动态长度,需要使用std::wstring* 来接口
// 注: 此接口为 release版,在debug版本中会出现乱码
std::wstring*	__stdcall commoninterfaceStringW(const wchar_t* chArg, int &ret ,unsigned int nTimeOut);


//由于 commoninterfaceString 接口返回数据类型为std::wstring*,必须使用以下接口来删除
void			__stdcall ReleaseDllStringW(std::wstring* pStr);

wchar_t*		__stdcall commoninterfaceCharW(const wchar_t* chArg, int &ret ,unsigned int nTimeOut);
void			__stdcall ReleaseDllCharW(wchar_t* pStr);

char*			__stdcall commoninterfaceChar(const char* chArg, int &ret ,unsigned int nTimeOut);
void			__stdcall ReleaseDllChar(char* pStr);


 unsigned int __stdcall getmachinecode(char* result,unsigned int nMaxCount);
 unsigned int __stdcall getmachinecodeW(wchar_t* result,unsigned int nMaxCount);
 unsigned int __stdcall getmachinecodenomac(char* result,unsigned int nMaxCount);
 unsigned int __stdcall getmachinecodenomacW(wchar_t* result,unsigned int nMaxCount);

 int __stdcall getloginstatus();


#endif