神烦论坛

 找回密码
 立即注册
查看: 4714|回复: 1

【VC++】百宝云注册码系统接入教程

[复制链接]

96

主题

220

帖子

1395

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1395
发表于 2016-9-29 10:13:39 | 显示全部楼层 |阅读模式
【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示例实现后的效果图吧!登录界面效果图:
5.png

主界面效果图
6.png




下面我们就来看看怎么接入注册码系统,完成注册码的登录验证操作!

第二步:接入步骤


1、复制几个重要文件到自己项目源码目录里。
主要是复制下面几个文件到项目里。列举如下:
WebZCM.lib: 百宝云注册码系统链接库LIB文件。
WebZCM.dll:百宝云注册码系统链接库DLL文件。
QFLicense.h:百宝云注册码系统链接库头文件。

2、项目的准备工作
将QFLicense.h添加到项目的解决方案里。如下图:
1.png

之后在项目的链接器中加入LIB文件,如下图所示:
2.png

记住:要在Debug与Release模式都要设置噢!!!!


3、调用初始化注册码系统接口:InitDll。
这个接口必须在其他所有接口之前调用(除了设置机器码模式接口:SetMachineMode之外),只有这个InitDll成功,才能正确的执行后面的其他功能。
例如示例里的代码:
3.png

如果这个接口调用成功了,那么后面再调用的话,会失败的! 只有失败的情况下,才可以多次调用,直到成功!
调用失败的话,可以通过获取错误信息接口(GetLastErrorInfo)来查看错误的原因!


4、调用注册码登录接口:LoginRegCode
调用这个接口,成功返回1,失败返回0,错误信息可以通过获取错误信息接口(GetLastErrorInfo)查看。
这个接口登录成功之后,需要自己写心跳线程,来验证注册码的使用状态!
例如示例里的代码,以下是代码片段:
  1. // 注册码登录按钮功能实现
  2. void CMyLoginDlg::OnBnClickedBtnLogin()
  3. {
  4.         // TODO: 在此添加控件通知处理程序代码
  5.         GetDlgItemText(IDC_EDIT_PROJNAME, g_csProjName);
  6.         GetDlgItemText(IDC_EDIT_TOKEN, g_csBbyToken);
  7.         GetDlgItemText(IDC_EDIT_REGCODE, g_csRegCode);

  8.         if(!g_InitDllFlag)
  9.         {
  10.                 if(InitDllW(g_csBbyToken, g_csProjName) == 0)
  11.                 {
  12.                         TCHAR buffer[1024] = {0};
  13.                         GetLastErrorInfoW(buffer, 1024);
  14.                         ::AfxMessageBox(_T("初始化注册码系统失败,原因:") + CString(buffer));
  15.                         return ;
  16.                 }
  17.                 else
  18.                 {
  19.                         g_InitDllFlag = true;
  20.                 }
  21.         }

  22.         if(LoginRegCodeW(g_csRegCode))
  23.         {
  24.                 ::WritePrivateProfileStringW(_T("DATA"), _T("ProjName"), g_csProjName, g_c**ePath + _T("\\myConfig.ini"));
  25.                 ::WritePrivateProfileStringW(_T("DATA"), _T("RegCode"), g_csRegCode, g_c**ePath + _T("\\myConfig.ini"));

  26.                 ::AfxMessageBox(_T("登录成功"));
  27.                 ::AfxBeginThread(CheckRegCodeTimeThread, this);
  28.                 this->OnOK();
  29.         }
  30.         else
  31.         {
  32.                 TCHAR buffer[1024] = {0};
  33.                 GetLastErrorInfoW(buffer, 1024);
  34.                 ::AfxMessageBox(_T("登录失败,原因:") + CString(buffer));
  35.                 return ;
  36.         }
  37. }
复制代码
登录成功之后,这里会开启一个线程,来完成注册码的心跳验证!


5、心跳验证注册码,使用获取注册码剩余时间来做:GetRegCodeTime
调用这个接口来获取注册码的剩余时间,如果调用正确的话,会返回注册码的剩余时间,如果失败的话,会返回相应的错误ID。

下面是心跳线程的实现代码。
  1. // 注册码心跳的线程的方法
  2. UINT CheckRegCodeTimeThread(LPVOID pParams)
  3. {
  4.         int nErrorCount = 0;
  5.         int nResult = 0;
  6.         while(true)
  7.         {
  8.                 // 获取注册码的剩余时间
  9.                 nResult = GetRegCodeTimeW();
  10.                 if(nResult > 0)
  11.                 {
  12.                         nErrorCount = 0;
  13.                         g_csRemainTime.Format(_T("注册码剩余时间:%d小时%d分钟"), (int)(nResult/60), nResult%60); // 记录剩余时间
  14.                 }
  15.                 else
  16.                 {
  17.                         nErrorCount++;
  18.                         if(nErrorCount > MAX_ERROR_NUM)
  19.                         {
  20.                                 TCHAR buffer[1024] = {0};
  21.                                 GetLastErrorInfoW(buffer, 1024);
  22.                                 ::AfxMessageBox(_T("注册码使用结束,原因:") + CString(buffer));
  23.                                 exit(-1);
  24.                         }
  25.                 }
  26.                 ::Sleep(60*1000);
  27.         }
  28.         return 0;
  29. }
复制代码


通过上面的这几步就可以接入百宝云注册码系统了。

接入成功之后,我们再来学习下其他几个重要的接口。


其他接口介绍


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)
回复

使用道具 举报

0

主题

2

帖子

26

积分

一级圣斗士

Rank: 1

积分
26
发表于 2017-9-4 15:04:28 | 显示全部楼层
有没有全部接口的详细说明
比如 参数1:xxxxxx  参数2:xxxxxx   返回值:xxxxxx
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|神烦论坛 ( 苏ICP备18043773号 )

GMT+8, 2024-12-22 11:34

Powered by bby! X3.4

© 2015-2024 baibaoyun

快速回复 返回顶部 返回列表