|
【VC++】百宝云注册码系统接入教程
在这里,我将告诉大家在VC++里如何接入百宝云注册码系统。
因学习VC++的同学都是编程高手了,因此下面的讲解应该会很好理解,如果大家在实际使用的时候,出现一些变量未定义的错误,可以自己参考示例代码来解决!
如果附件的源码不是最新版本的,请自己安装百宝云注册码系统应用,之后下载客户端里的最新源码。传送链接:
免费版:http://www.91shenfan.com/index.php?index/info&id=15
收费版:http://www.91shenfan.com/index.php?index/info&id=41 或者 http://www.91shenfan.com/index.php?index/info&id=58
我们先来看看,VC示例实现后的效果图吧!登录界面效果图:
主界面效果图:
下面我们就来看看怎么接入注册码系统,完成注册码的登录验证操作!
1、复制几个重要文件到自己项目源码目录里。
主要是复制下面几个文件到项目里。列举如下:
WebZCM.lib: 百宝云注册码系统链接库LIB文件。
WebZCM.dll:百宝云注册码系统链接库DLL文件。
QFLicense.h:百宝云注册码系统链接库头文件。
2、项目的准备工作
将QFLicense.h添加到项目的解决方案里。如下图:
之后在项目的链接器中加入LIB文件,如下图所示:
记住:要在Debug与Release模式都要设置噢!!!!
3、调用初始化注册码系统接口:InitDll。
这个接口必须在其他所有接口之前调用(除了设置机器码模式接口:SetMachineMode之外),只有这个InitDll成功,才能正确的执行后面的其他功能。
例如示例里的代码:
如果这个接口调用成功了,那么后面再调用的话,会失败的! 只有失败的情况下,才可以多次调用,直到成功!
调用失败的话,可以通过获取错误信息接口(GetLastErrorInfo)来查看错误的原因!
4、调用注册码登录接口:LoginRegCode
调用这个接口,成功返回1,失败返回0,错误信息可以通过获取错误信息接口(GetLastErrorInfo)查看。
这个接口登录成功之后,需要自己写心跳线程,来验证注册码的使用状态!
例如示例里的代码,以下是代码片段:
- // 注册码登录按钮功能实现
- void CMyLoginDlg::OnBnClickedBtnLogin()
- {
- // TODO: 在此添加控件通知处理程序代码
- GetDlgItemText(IDC_EDIT_PROJNAME, g_csProjName);
- GetDlgItemText(IDC_EDIT_TOKEN, g_csBbyToken);
- GetDlgItemText(IDC_EDIT_REGCODE, g_csRegCode);
- if(!g_InitDllFlag)
- {
- if(InitDllW(g_csBbyToken, g_csProjName) == 0)
- {
- TCHAR buffer[1024] = {0};
- GetLastErrorInfoW(buffer, 1024);
- ::AfxMessageBox(_T("初始化注册码系统失败,原因:") + CString(buffer));
- return ;
- }
- else
- {
- g_InitDllFlag = true;
- }
- }
- if(LoginRegCodeW(g_csRegCode))
- {
- ::WritePrivateProfileStringW(_T("DATA"), _T("ProjName"), g_csProjName, g_c**ePath + _T("\\myConfig.ini"));
- ::WritePrivateProfileStringW(_T("DATA"), _T("RegCode"), g_csRegCode, g_c**ePath + _T("\\myConfig.ini"));
- ::AfxMessageBox(_T("登录成功"));
- ::AfxBeginThread(CheckRegCodeTimeThread, this);
- this->OnOK();
- }
- else
- {
- TCHAR buffer[1024] = {0};
- GetLastErrorInfoW(buffer, 1024);
- ::AfxMessageBox(_T("登录失败,原因:") + CString(buffer));
- return ;
- }
- }
复制代码 登录成功之后,这里会开启一个线程,来完成注册码的心跳验证!
5、心跳验证注册码,使用获取注册码剩余时间来做:GetRegCodeTime
调用这个接口来获取注册码的剩余时间,如果调用正确的话,会返回注册码的剩余时间,如果失败的话,会返回相应的错误ID。
下面是心跳线程的实现代码。
- // 注册码心跳的线程的方法
- UINT CheckRegCodeTimeThread(LPVOID pParams)
- {
- int nErrorCount = 0;
- int nResult = 0;
- while(true)
- {
- // 获取注册码的剩余时间
- nResult = GetRegCodeTimeW();
- if(nResult > 0)
- {
- nErrorCount = 0;
- g_csRemainTime.Format(_T("注册码剩余时间:%d小时%d分钟"), (int)(nResult/60), nResult%60); // 记录剩余时间
- }
- else
- {
- nErrorCount++;
- if(nErrorCount > MAX_ERROR_NUM)
- {
- TCHAR buffer[1024] = {0};
- GetLastErrorInfoW(buffer, 1024);
- ::AfxMessageBox(_T("注册码使用结束,原因:") + CString(buffer));
- exit(-1);
- }
- }
- ::Sleep(60*1000);
- }
- return 0;
- }
复制代码
通过上面的这几步就可以接入百宝云注册码系统了。
接入成功之后,我们再来学习下其他几个重要的接口。
1、 注册码登录自动验证接口:LoginRegCodeAuto
这个接口调用成功之后,内部会自动开启心跳线程来检测注册码的状态。当心跳验证失败之后,内部会自动退出软件!
2、更新接口:UpdateFile,UpdateFileEx
这2个接口都可以用来更新软件,但是建议大家使用UpdateFileEx接口来实现。UpdateFileEx接口的第二个参数是控制更新成功之后,是否自动启动更新后的软件。
UpdateFile接口更新成功之后,会弹出框,让用户选择是否启动更新后的软件!
3、获取自定义数据接口:GetCustom
这个接口是用来获取作者存储在注册码服务器的数据,建议大家在实际项目里使用这个接口,这样以来就可以增大软件被PO JIE的风险!
4、设置机器码模式接口:SetMachineMode
如果使用默认的方式登录,在同一台机器上出现不同的机器码,或者说注册码登录的时候,返回错误为注册码已经绑定了其他机器。
这样是因为默认的是SetMachineMode使用0模式。所以只要设置SetMachineMode的参数1即可更换获取机器码的方式。
5、注册码客户端充值接口:Charge
使用这个接口,用户就可以在客户端上直接进行充值了!但是这个接口是以卡充卡模式充值的,而且充值卡必须是一张新卡。具体错误看错误信息。
6、解绑接口:Ubind
这个解绑接口,有二种模式,当不传解绑密码时,那么只能在登录成功的机器上解绑,如果传入密码的话,那么就使用注册码的解绑密码进行解绑。
其他更新的接口,请参照文档说明!
如果在实际操作过程中遇到不可解决的问题,可以联系在线客服,或者是加入:309604797咨询。
附件:
VC 接入注册码系统示例.zip
(3.26 MB, 下载次数: 527)
|
|