VC++调用大漠插件的方法
2014-02-25 22:40
295 查看
测试环境:Win7 64位 + VC 6.0
最近玩一款网页游戏,想着自己做个模拟辅助用用,于是下载了一个大漠插件,但是各种注册就是不成功,通过查阅网上各位前辈的资料,终于将问题解决,现将方法分享给大家,如有什么不正确的地方还请大家指正。
注意的几点:
1、大漠插件必须要注册之后才能使用。
2、注册时要保证dm.dll,在你要注册的路径下。
3、使用大漠函数时,要加上dm.h头文件
首先,大漠的DLL,不是普通的DLL,它是一个Active x插件,必需要注册之后才能使用,注册是否成功可以用dm.GetBasePath() 函数看看能否获得正确的路径,获取不到表示注册不成功。
1、建立一个MFC对话框工程,默认完成就行。
我们给对话框添加两个按钮
双击两个对话框添加按钮的响应函数,然后按下快捷键Ctrl + W,打开类向导如图
在右上角的添加类中选择第二项,添加我们下载的dm.dll,然后出来如下图的添加类向导,OK就可以了
这时候在VC的类视图列表中就多了一个Idmsoft类
这个类的源文件就是dm.h dm.cpp,我们可以看到大漠插件提供的接口函数就在这里定义实现的,所以如果我们要在别的源文件中使用这些函数,别忘了包含dm.h头文件。
2、接着我们就来注册大漠插件dm.dll
首先我们自定义一个注册DLL的函数,该函数最好写成Dlg类的成员函数
然后注册按钮中实现方式如下:
//注册
void CMFC_Dlg::OnBtnRegist()
{
CString strFilePath;
char strBuff[256];
GetCurrentDirectory(256,strBuff);
strFilePath.Format("%s\\dm.dll",strBuff);
RegistryDll(strFilePath);
}
这样大漠插件就注册完毕了,在测试按钮中我们可以调用它测试一下
3、测试按钮中代码如下:
测试之前一定要保证工程目录中有dm.dll 放到dm.h和dm.cpp所在的目录,当然这取决于你注册时的路径。
void CMFC_Dlg::OnBtnTest()
{
Idmsoft dm; ::CoInitialize(NULL);//初始化线程com库
dm.CreateDispatch("dm.dmsoft");
CString strPath = dm.GetBasePath();//获取注册到系统中的dm.dll的路径
AfxMessageBox(strPath);
}
这样运行起来的结果就是这样,某数字公司会检测到你的注册
测试结果如下图:
最近玩一款网页游戏,想着自己做个模拟辅助用用,于是下载了一个大漠插件,但是各种注册就是不成功,通过查阅网上各位前辈的资料,终于将问题解决,现将方法分享给大家,如有什么不正确的地方还请大家指正。
注意的几点:
1、大漠插件必须要注册之后才能使用。
2、注册时要保证dm.dll,在你要注册的路径下。
3、使用大漠函数时,要加上dm.h头文件
首先,大漠的DLL,不是普通的DLL,它是一个Active x插件,必需要注册之后才能使用,注册是否成功可以用dm.GetBasePath() 函数看看能否获得正确的路径,获取不到表示注册不成功。
1、建立一个MFC对话框工程,默认完成就行。
我们给对话框添加两个按钮
双击两个对话框添加按钮的响应函数,然后按下快捷键Ctrl + W,打开类向导如图
在右上角的添加类中选择第二项,添加我们下载的dm.dll,然后出来如下图的添加类向导,OK就可以了
这时候在VC的类视图列表中就多了一个Idmsoft类
这个类的源文件就是dm.h dm.cpp,我们可以看到大漠插件提供的接口函数就在这里定义实现的,所以如果我们要在别的源文件中使用这些函数,别忘了包含dm.h头文件。
2、接着我们就来注册大漠插件dm.dll
首先我们自定义一个注册DLL的函数,该函数最好写成Dlg类的成员函数
BOOL RegistryDll(CString& szDllPath) { LRESULT (CALLBACK* lpDllEntryPoint)(); HINSTANCE hLib =LoadLibrary(szDllPath); if (hLib < (HINSTANCE)HINSTANCE_ERROR) { return FALSE; } (FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, "DllRegisterServer"); BOOL bRet = FALSE; if (lpDllEntryPoint != NULL) { HRESULT hr = (*lpDllEntryPoint)(); bRet = SUCCEEDED(hr); if (FAILED(hr)) { AfxMessageBox("×¢²áʧ°Ü"); } } FreeLibrary(hLib); return bRet; }
然后注册按钮中实现方式如下:
//注册
void CMFC_Dlg::OnBtnRegist()
{
CString strFilePath;
char strBuff[256];
GetCurrentDirectory(256,strBuff);
strFilePath.Format("%s\\dm.dll",strBuff);
RegistryDll(strFilePath);
}
这样大漠插件就注册完毕了,在测试按钮中我们可以调用它测试一下
3、测试按钮中代码如下:
测试之前一定要保证工程目录中有dm.dll 放到dm.h和dm.cpp所在的目录,当然这取决于你注册时的路径。
void CMFC_Dlg::OnBtnTest()
{
Idmsoft dm; ::CoInitialize(NULL);//初始化线程com库
dm.CreateDispatch("dm.dmsoft");
CString strPath = dm.GetBasePath();//获取注册到系统中的dm.dll的路径
AfxMessageBox(strPath);
}
这样运行起来的结果就是这样,某数字公司会检测到你的注册
测试结果如下图:
相关文章推荐
- C++ string 用法详解
- c++项目包含c头文件 .c文件时的编译
- [面试算法]有一无符号整型数组,大小为10, 初始的数值随机,但在[0, 99]之间。请用C语言写一个过滤程序,令数组内的数据互不相等。
- 详细讲解C++ 类的继承
- [C++学习历程]基础部分 C++中的类型和声明
- [C++学习历程]基础部分 C++中的类型和声明
- [C++学习历程]基础部分 C++中的类型和声明
- Visual Studio Installer打包后生成的安装文件每次执行都需要重新安装C++ 2010运行库(x86)的解决方案
- LeetCode 63 — Unique Paths II(C++ Java Python)
- C语言的内存分配(参考)
- C++细节
- 困难的串C语言
- C语言extern关键字使用
- C语言中float,double类型,在内存中的结构(存储方式).
- C语言100个经典的算法
- C语言宏定义函数的使用(定义单行和多行)
- 1137. 河床 变笨了
- 关于从java转C++的想好了
- C++编程
- C++错误 LINK : fatal error LNK1168: cannot open Debug/ling.exe for writing