## VS2019+QT5.9免注册调用大漠插件(最详细最新)

前言

不多说,手把手教,原理不多赘述,力求让大家5分钟搞定

环境配置

vs2019

qt5.15.2_msvc2019(此处必须注意,大漠插件不支持64位!)

dm7.2

如果搞不懂最好用这个版本,有的qt插件版本和vs不兼容,这个我试了比较不错。

小白看这里:

​ vs2019怎么下载:随便百度一个vs2019或者去官网下载一个installer下载器然后下载就行了,这东西最好别赶新鲜下2022,指不定有啥问题。

​ qt5.15.2怎么下载:随便百度一个qt下载器或者去官网下载一个下载器,选长期支持版本的就是5.15.2了,然后扩展程序里面搜索qt,安装插件后配置路径就行了。配置成这样的。看清楚,不可以选64位!

​ dm7.2怎么下载:这个是收费的,可以tb搜,有一家叫易语言吧的商家可能是官方,反正我充了五十块钱一辈子都没用完,好像一天一分钱还是怎么来着。如果你用的免费3.x版本的也可以,就是后续用不了一些功能,搞着玩可以。拿到dm.dll文件就可以


)

新建项目

打开vs2019,安装qt插件后可以新建qt工程,选择这个qt widgets application

起个名字,选择路径,然后选debug版本,然后无脑下一步等进入vs界面。

确认这个平台是win32!

F5运行一下,看看能不能出来个窗口。

显然可以,接下来是重点。

调用大漠插件

就直接在main里面演示一下。

首先把dm.dll放在项目根目录

右键项目打开这个文件夹,直接把dm.dll放进去

在资源文件右键添加现有项,把dm.dll添加进去

在main.cpp头部添加代码

#import "dm.dll" no_namespace

注意要加后面的no_namespace,不然生成的带dm命名空间挺烦的。

然后生成解决方案。

如果生成失败,提示不支持/MP之类的话,把设置里的多处理器编译改成否即可。

右键项目->属性

生成成功。打开刚才的文件根目录,里面有个debug文件夹,打开,找到两个文件"dm.tlh"、"dm.thi"

把这两个文件复制到项目根目录,现在目录里面有三个重要文件了,dm.dll、dm.tlh、dm.tli

然后把dm.tlh文件添加到头文件,这个文件就相当于.h文件。

双击打开dm.tlh并拉到最后,把最后的绝对路径改为相对路径。

然后必须ctrl+s保存,不然没效果哦!!!

测试功能

到这里就结束了,就相当于dm.dll生成的头文件和源文件导入进来了,回到main文件,把开头的#import "dm.dll" no_namespace删了吧。

然后头文件添加一个

#include "dm.tlh"

这时候就等于把大漠所有接口都导入了,现在文件这样

现在随便打一个dm就会有代码提示dmsoft就说明成功了。

然后写一个实例化对象的函数,再调用,借用前面大神写的,具体啥意思我也看不懂。

Idmsoft* GetDmObject()
{
	typedef  HRESULT(__stdcall* PDllGetClassObject)(REFCLSID, REFIID, LPVOID*);
	PDllGetClassObject  pDllGetClassObject = NULL;
	HMODULE  h = ::LoadLibrary(L"dm.dll");
	if (h == 0)
	{
		return  NULL;
	}
	pDllGetClassObject = (PDllGetClassObject)GetProcAddress(h, "DllGetClassObject");
	if (pDllGetClassObject == NULL)
	{
		return  NULL;
	}
	IClassFactory* pcf = NULL;
	HRESULT hr = pDllGetClassObject(__uuidof(dmsoft), IID_IClassFactory, (void**)&pcf);
	if (SUCCEEDED(hr) && pcf != NULL)
	{
		DWORD* PGetRes = NULL;
		hr = pcf->CreateInstance(NULL, IID_IUnknown, (void**)&PGetRes);
		if (SUCCEEDED(hr) && PGetRes != NULL)
		{
			pcf->Release();
			return (Idmsoft*)PGetRes;
		}
		if (pcf != NULL)
		{
			pcf->Release();
		}
	}
	if (pcf != NULL)
	{
		pcf->Release();
	}
	return  NULL;
}

把这段函数贴进去。

然后在main函数里面调用函数。

现在我的main.cpp是这样的:

为了测试引入的qDebug()函数,输出大漠版本号。

运行。

成功输出,说明调用成功!

posted @ 2023-01-03 07:34  笑忘书丶丶  阅读(940)  评论(0编辑  收藏  举报