4.4.1 点击运行后,报错没有注册类
System.Runtime.InteropServices.COMException
HResult=0x80040154
Message=没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
Source=System.Windows.Forms
StackTrace:
at System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid)
at System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid)
at System.Windows.Forms.AxHost.CreateInstanceCore(Guid clsid)
at System.Windows.Forms.AxHost.CreateInstance()
at System.Windows.Forms.AxHost.GetOcxCreate()
at System.Windows.Forms.AxHost.TransitionUpTo(Int32 state)
at System.Windows.Forms.AxHost.CreateHandle()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.AxHost.EndInit()
at WindowsFormsApp4.Form1.InitializeComponent() in D:\VisionProject\VSWorkSpace\WinformWS\WindowsFormsApp4\WindowsFormsApp4\Form1.Designer.cs:line 64
at WindowsFormsApp4.Form1..ctor() in D:\VisionProject\VSWorkSpace\WinformWS\WindowsFormsApp4\WindowsFormsApp4\Form1.cs:line 17
at WindowsFormsApp4.Program.Main() in D:\VisionProject\VSWorkSpace\WinformWS\WindowsFormsApp4\WindowsFormsApp4\Program.cs:line 19
项目属性,生成的目标平台修改为x64。
4.4.2 控件已经成功添加到工具箱中,但未在活动设计器中启用
问题描述:Visual studio 2022 添加com组件到工具箱错误提示:
下列控件已经成功添加到工具箱中,但未在活动设计器中启用 ,请确认要添加的控件能够兼容当前设计器和.net framework 版本。
修改方法:
要选择上面这个Windows窗体应用(.NET Framework)
【Windows 窗体应用】的窗体属性中还有其他信息,目标框架:.NET Core 3.1
而【Windows 窗体应用(.NET Framework)】,其框架则是.NET Framework
这个.NET Core与 .NET Framework是完全不一样的东西:
- .NET framework框架开发出来的应用只能在windows上运行。
- .netcore 是开源的,开发出来的应用可以跨平台运行,比如运行在MAC,Linux上 。
而我们添加的COM组件,实际上是只应用于windows环境的技术,在一个非windows 的底层技术以及上层环境肯定就是不行的了。
4.4.3 引入控件报错
1.在工具箱中,拖入控件到UI中,会弹窗报错:
直接重新生成项目,也会报错:
生成的dll确实是64位的:
2.修改为x64平台(上述第二章的qt com dll也是基于x64编译的)后,编译正常,且AxActiveQTServer2Lib不再报错
五、最终代码demo
https://download.****.net/download/u011490813/89246081https://download.****.net/download/u011490813/89246081
参考资料
COM简介
COM - COM的简单介绍_com组件结构-****博客
windeployqt打包Qt应用程序(Com只注册了,还不够,需要通过windeploy发布依赖的文件):
windeployqt打包Qt应用程序_qt windeployqt 打包-****博客
Qt的进程间通信,以Active服务器的形式,手把手教你VS上进行Qt的COM、ActivedQt Server的开发,比保姆还保姆
https://www.cnblogs.com/Leventure/p/16971934.html
VS+QT插件创建qt 的ActiveQT Server工程踩过的坑_qt activeqt server-****博客