前言
有很多人都在问C++MFC怎么免注册调用?其实这些都有参考但是对于新手来说,编译器对新手的不友好,很多编程新手就算是找到别人的注册方法也分析运行不了,这是为什么呢?这是出教程的人根本就没考虑到新手,很多细节问题留下来了,然后你哪里就报错,代码报红,就编译不通过,然后你就觉得这个方法不行,然后就放弃了,今天我们就来解决这个问题,用最详细的图文来告诉你跟着我的步骤来你就能C++MFC免注册调用大漠插件
一、大漠插件是什么?
示例:大漠插件是基于C++封装 的一种找图找色找字的函数和工具,用了免注册调用就不会在系统上留下痕迹。
一、打开VS2017,新建MFC应用程序,下一步,基于对话框,完成
二、删除掉界面上的组件,添加个按钮,生成一下
三、自己的项目,属性,打开类向导,添加类,类型库中的MFC类,文件,位置,里面添加dm.dll
四、选中Idmsoft 点右边箭头移动过去然后点完成
五、确认,然后发现自动生成了大漠头文件
六、双击打开头文件修改成#import "dm.dll"no_namespace
七、然后把之前选的大漠DLL复制到源文件目录下
八、还有复制一份到生成的EXE下面
九、接着双击按钮进入函数
十、在控件事件上面加这些代码
#include "Cdmsoft.h"
Idmsoft * InitNewDm()
{
Idmsoft*m_dm = NULL;
//COleVariant temp1,temp2;
bool m_bInit = false;
//下面直接加载dll创建对象,避免进行注册文件
typedef HRESULT(__stdcall * pfnGCO) (REFCLSID, REFIID, void**);
pfnGCO fnGCO = NULL;
HINSTANCE hdllInst = LoadLibrary(L"dm.dll");
fnGCO = (pfnGCO)GetProcAddress(hdllInst, "DllGetClassObject");
if (fnGCO != 0)
{
IClassFactory* pcf = NULL;
HRESULT hr = (fnGCO)(__uuidof(dmsoft), IID_IClassFactory, (void**)&pcf);
if (SUCCEEDED(hr) && (pcf != NULL))
{
hr = pcf->CreateInstance(NULL, __uuidof(Idmsoft), (void**)&m_dm);
if ((SUCCEEDED(hr) && (m_dm != NULL)) == FALSE)
return false;
}
pcf->Release();
m_bInit = true;
}
else
m_bInit = false;
return m_dm;
}
十一、然后再控件事件里面加上调用代码
Idmsoft *dm = InitNewDm();
CString c= dm->Ver();
MessageBoxW(c);
十二、生成代码,调试免注册大漠插件成功了