QT使用dumpcpp为COM生成h及cpp的方式,COM是C#的dll注册的

目录

1.C#的dll注册为COM,采用bat的方式

2.通过qt的dumpcpp来生成h及cpp文件

3.h文件和cpp文件处理。


台达数控系统的C#的dll

dumpcpp用的tlb文件

dumpcpp生成的原生h文件

dumpcpp生成的原生cpp

dump生成后的的原生cpp文件修改后的cpp文资源

dump生成后的的原生h文件修改后的h文资源

1.C#的dll注册为COM,采用bat的方式

采用C#的方式注册:

bash 复制代码
%windir%\Microsoft.NET\Framework64\v4.0.30319\Regasm CNCNetLib2.dll /tlb: CNCNetLib2.tlb /codebase

卸载COM

bash 复制代码
%windir%\Microsoft.NET\Framework64\v4.0.30319\Regasm CNCNetLib2.dll /tlb: CNCNetLib2.tlb /u /codebase

2.通过qt的dumpcpp来生成h及cpp文件

在qt的安装目录下找到dumpcpp.exe文件,然后安装shift调用powershell窗口(生成文件在dumpcpp路径下),也可直接在tlb文件所在目录打开powershell 窗口,直接通过 dumpcpp ,然后将tlb文件直接拉取到powershell窗口中即可。生成的文件就在tlb文件所在目录下。

然后输入 dumpcpp tlb文件路径 ,回车即可 tlb路径直接将tlb文件拉进窗口即可自动生成。之后在dumpcpp.exe文件所在路径下将自动生成h及cpp文件。该文件即可以把COM组件,像普通的类进行调用。上述1,2两步不分先后,但是在编程之前,得把dll注册到系统中。否则到时候会调用失效。

bash 复制代码
dumpcpp tlb文件路径

3.h文件和cpp文件处理。

在项目中需要添加COM容器模块QAxContainer。

当把这两个文件加载到C++项目中后,有可能会出现一些错误。这时候就需要做一些简单的修改。

将C#中用的接口注释掉。

  1. 有些命名空间可能跟类名一样,这时候最好手动将命名空间换一个,采用全部替换 -旧的命名空间:: -全部替换-新的命名空间::的方式一次解决,否则在别的类中使用时,采用using namespace 的方式将失效。

  2. 有些在C#中用到了多个构造函数,有些类在QT中没办法识别,可以将不能识别的注释掉。保留一个能够正常使用的。

  3. 有些调用的其他跟自己需要的类不相干的类也可以注释掉,因为可能也有些在qt里面没法识别,都可以注释掉。

  4. 这时候差不多就能用了,如果在自己需要的那个类里面出现了不能注释掉的,比如只有一个构造函数,但是里面又有qt无法识别的类时,这个笔者能力有限,也不知道咋弄。

  5. 目前在遇到的2个项目里面都没有碰到上面的问题,需要的类都可以通过简单的删除或者修改就可以使用了。

  6. 当调用多个COM时,可能这些COM有些相同的定义,这时候最好新建一个h文件,将这些相同的定义放到一个h文件中,这样保证不会多重定义。如下代码,是dumpcpp自动生成的,每个COM组件都有这个时,需要把这些放到一个头文件中,再包含这个头文件即可。

    cpp 复制代码
    struct IDispatch;
    
    // Referenced namespace
    namespace System {
        class ISite;
    }
    
    namespace mscorlib {
        class _Type;
        class _EventHandler;
    }
    
    Q_DECLARE_OPAQUE_POINTER(System::ISite*)
    Q_DECLARE_OPAQUE_POINTER(mscorlib::_Type*)
    Q_DECLARE_OPAQUE_POINTER(mscorlib::_EventHandler*)
相关推荐
颜x小1 分钟前
[C#]泛型类与泛型方法
开发语言·c++·c#
benben0442 分钟前
大模型之基于PEFT的SFT微调实战篇
开发语言·python
caishenzhibiao11 分钟前
顺势交易矩阵主图 同花顺期货通指标
java·c语言·c#
Lhan.zzZ14 分钟前
深入理解 windeployqt:混合 C++/Qt 项目的打包指南
开发语言·c++·qt
我命由我1234528 分钟前
Android 开发 - 广播组件(标准广播、有序广播、静态注册广播、分钟到达广播、网络变更广播...)
android·java·开发语言·网络·java-ee·android studio·android-studio
TDengine (老段)1 小时前
TDengine Node.js 与 C# 连接器 — Web 服务与 .NET 集成
大数据·数据库·node.js·c#·.net·时序数据库·tdengine
米码收割机1 小时前
【Python】Python Django+Vue3校园自习室预约管理系统(源码+文档+PPT)【独一无二】
开发语言·python·django
AstartesEternal1 小时前
python第二次作业(列表,字典)
开发语言·python
星恒随风1 小时前
C++ STL 详解:set 与 multiset 的使用、区间查询和算法应用
开发语言·c++·笔记·学习·算法
数聚天成DeepSData1 小时前
外贸海关进出口数据去哪免费下载?从统计到明细的查找指南
linux·服务器·开发语言·前端·网络·人工智能·自然语言处理