1: 参考文章: https://blog.csdn.net/chuhe163/article/details/112745590
2: 免注册调用代码实现
2.1 先建一个空的mfc项目
2.2 拷贝dm.dll 到文件项目所在文件夹。
2.2.1 拷贝到项目后,右键项目->添加 ->现有项 ->选择dm.dll
2.3 在mfc文件中增加如下代码。然后右键点击项目->重新生成。
#import "dm.dll" no_namespace
2.3.1 这个时候在Debug目录会生成dm.tlh和dm.tli两个文件。
2.3.2 打开dm.tlh进行修改.注意一定是dm.tlh。
修改前:
修改后:
2.3.3 将dm.tlh和dm.tli两个文件复制到项目目录。然后右键项目->添加 ->现有项 ->选择dm.tlh和dm.tli(具体操作,类似2.2.1)
2.4 准备开始调用
2.4.1 在要调用的类里面增加如下代码。
#include "dm.tlh" //大漠插件,拷贝到项目目录里了
Idmsoft* GetDmObject()
{
Idmsoft* m_dm = NULL;
bool m_bInit = false;
//直接加载dll创建对象,避免进行注册文件
typedef HRESULT(_stdcall* pfnGCO)(REFCLSID, REFIID, void**);
pfnGCO fnGCO = NULL;
HINSTANCE hdllInst = LoadLibrary(_T("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 NULL;
}
pcf->Release();
m_bInit = true;
}
else
m_bInit = false;
return m_dm;
}
2.4.2 开始调用
Idmsoft* pDm = GetDmObject();
long dm_ret = pDm->Reg(_T("注册码"), _T("附加码"));
if (dm_ret != 1)
{
Log(_T("收费注册失败,返回值:%d"), dm_ret);
//delete g_dm;
return 0;
}
CString v = pDm->Ver();
Log(v);
3:
3.1 大漠下载相关信息::http://www.dmcj.vip/zhuce/
3.2 大漠插件包里有个“大漠类库生成工具v26.0.exe”,点击后“选择dm.dll”的位置,然后点击”生成”,就会生成各种语言的支持库。
C++代码为:
读我.txt里的内容为:
生成的obj.h和obj.cpp即是使用在VC++平台下的类库封装.
具体如何使用这个类,请查看example(ui).rar,example(console).rar以及example(多线程模板).rar的工程. vs2008 vs2010 vs2012 vs2015系列都是一样的.
我使用的是vs2022,引入代码没起作用,希望有成功的可以交流下。