龙马谷

 找回密码
 立即注册

QQ登录

只需一步,快速开始

龙马谷VIP会员办理客服QQ:82926983(如果临时会话没有收到回复,请先加QQ好友再发。)
1 [已完结] GG修改器新手入门与实战教程 31课 2 [已完结] GG修改器美化修改教程 6课 3 [已完结] GG修改器Lua脚本新手入门教程 12课
4 [已完结] 触动精灵脚本新手入门必学教程 22课 5 [已完结] 手游自动化脚本入门实战教程 9课 6 [已完结] C++射击游戏方框骨骼透视与自瞄教程 27课
7 [已完结] C++零基础UE4逆向开发FPS透视自瞄教程 29课 8 [已完结] C++零基础大漠模拟器手游自动化辅助教程 22课 9 [已完结] C++零基础开发DXF内存脚本辅助教程 32课
以下是天马阁VIP教程,本站与天马阁合作,赞助VIP可以获得天马阁对应VIP会员,名额有限! 点击进入天马阁论坛
1 [已完结] x64CE与x64dbg入门基础教程 7课 2 [已完结] x64汇编语言基础教程 16课 3 [已完结] x64辅助入门基础教程 9课
4 [已完结] C++x64内存辅助实战技术教程 149课 5 [已完结] C++x64内存检测与过检测技术教程 10课 6 [已完结] C+x64二叉树分析遍历与LUA自动登陆教程 19课
7 [已完结] C++BT功能原理与x64实战教程 29课 8 [已完结] C+FPS框透视与自瞄x64实现原理及防护思路
查看: 5607|回复: 0

VS2010免注册调用大漠插件

[复制链接]

8

主题

1

回帖

15

积分

编程入门

Rank: 1

龙马币
56
   相信有很多人都想知道怎么实现免注册调用大漠DLL,最近看了个教程鼓捣了一天终于实现免注册调用大漠插件,但是作者用的是VS2013,我用的是VS2010,用作者的这个方法时还是出现了一些问题,写这篇博客一是为了日后忘记后好查询,二是也可以方便后来人。

  首先来建立一个基于对话框的MFC项目,作者直接提供了两个文件"RegDM.cpp"和"RegDM.h"把这两个文件放到自己建立的项目的源码列表和头文件列表中,本人照着操作编译VS2010提示这两个文件是高版本的VC++生成的文件,百度了半天也解决不了,后来想到一个办法用notepad++打开2个文件复制里头的代码后用VS2010新建一个空的.h和.cpp文件,把代码放进去保存,编译通过了。

下面是RegDM.h文件里的代码:
  1. #import "dm.dll" //将dm.dll放在源码目录下
  2. #include "Release/dm.tlh"
  3. extern Dm::Idmsoft* GetDmbject();
复制代码

RegDM.cpp里的代码:
  1. #include "stdafx.h"
  2. #include "RegDM.h"

  3. Dm::Idmsoft* GetDmbject()
  4. {
  5. typedef  HRESULT(__stdcall * PDllGetClassObject)(REFCLSID, REFIID, LPVOID*);
  6. PDllGetClassObject  pDllGetClassObject = NULL;
  7. HMODULE  h = ::LoadLibrary(L"dm.dll");
  8. if (h == 0)
  9. {
  10. return  NULL;
  11. }
  12. pDllGetClassObject = (PDllGetClassObject)GetProcAddress(h, "DllGetClassObject");
  13. if (pDllGetClassObject == NULL)
  14. {
  15. return  NULL;
  16. }
  17. IClassFactory* pcf = NULL;
  18. HRESULT hr = pDllGetClassObject(__uuidof(Dm::dmsoft), IID_IClassFactory, (void**)&pcf);
  19. if (SUCCEEDED(hr) && pcf != NULL)
  20. {
  21. DWORD* PGetRes = NULL;
  22. hr = pcf->CreateInstance(NULL, IID_IUnknown, (void**)&PGetRes);
  23. if (SUCCEEDED(hr) && PGetRes != NULL)
  24. {
  25. pcf->Release();
  26. return (Dm::Idmsoft*)PGetRes;
  27. }
  28. if (pcf != NULL)
  29. {
  30. pcf->Release();
  31. }
  32. }
  33. if (pcf != NULL)
  34. {
  35. pcf->Release();
  36. }
  37. return  NULL;
  38. }
复制代码
这样处理以后VC不再说版本过高什么了,但是又说找不到"dm.tlh"这个文件,在作者提供的工程里找到这个文件,修改路径引用到自己的工程里,依旧报错,鼓捣了半天,直接注释掉RegDM.h文件里的第二行也就是:

#include "Release/dm.tlh"

   选择“生成解决方案”就会在项目的Debug文件夹或者Release文件夹下生成我们自己项目的dm.tlh文件,现在回到RegDM.h文件里,在第二行把dm.tlh文件换成当前项目dm.tlh文件的路径即可。

    现在Ctrl+F5生成一下看看,这下正常了,不报错了。编译通过,可以正常操作大漠了。编译成release版本试试?双击运行报错,此时把大漠的"dm.dll"放入Release文件夹下,再次打开,就能正常运行了,此时把这个文件夹发送到其他的电脑上,没有注册大漠插件的电脑也能正常使用了。关于如何把Debug版本换成Release版本的方法就请自行百度了,很容易找到。

"const char*"类型的实参与"LPCTSTR"类型的形参不兼容

这是因为工程默认编码为Unicode,比如下面这句:
  1. SetDlgItemText(IDC_EDIT2,"vc");</div>
复制代码
这是改变编辑框或者内容的函数,参数2是要修改的结果字符串,直接输入的话因为是在Unicode编码下建立的工程,所以会和LPCTSTR类型不符,此
时需要在字符串前加"L"即:
  1. SetDlgItemText(IDC_EDIT2,L"vc");
复制代码

转换类型,或在字符串前加_T(),括号内包裹字符串,即:
  1. SetDlgItemText(IDC_EDIT2,_T("vc"));
复制代码

还有记得在你的工程文件xxxDlg.cpp下#include "RegDM.h"。


VC大漠一个找图的例子:

  1. Dm::Idmsoft *dm = GetDmbject();//创建一个指针变量,并获取大漠对象地址,然后存到dm里.
  2. //MessageBox(dm->Ver(), "大漠版本号", MB_OK);
  3. //::MessageBox(NULL, L"大漠版本号",L"hah" ,0);
  4. //dm->BindWindow(68340,"normal","normal","normal",0);

  5. VARIANT x,y;
  6. int q=2;
  7. while(q==2)  //条件为非0时才开始循环
  8. {
  9. dm->FindPic(405,210,433,233, L"C:\jsq.bmp", "000000",0.9,0,&x,&y);

  10. //坐标返回值是一个指针
  11. if (x.lVal>0)  
  12. {
  13. MessageBox(L"找到了");
  14. dm->MoveTo(600,215);
  15. Sleep(100);
  16. dm->LeftClick();
  17. q++;

  18. }
  19. Sleep(300);
  20. return;
  21. }
复制代码


经过断断续续一个星期的努力总算做出一个比较完整的例子了,工程是用VS2010制作,在这里发出来方便后来人。

这里还要多说一句,从Debug到Release的转换也要先注释掉RegDM.h文件里的#include "Release/dm.tlh",然后按F7生成解决方案,再把项目源码文件夹下的Release新生成dm.tlh文件include到RegDM.h文件中去才能正常编译。

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

本版积分规则

龙马谷| C/C++辅助教程| 安卓逆向安全| 论坛导航| 免责申明|Archiver|
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表龙马谷立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2018-2021 All Right Reserved.
在线客服
快速回复 返回顶部 返回列表