C#创建COM组件,QT调用COM组件简单测试(VS2008+QT4.6.4)
来源:互联网 发布:看股票行情的软件 编辑:程序博客网 时间:2024/05/18 02:00
参考:
http://wenku.baidu.com/link?url=76Qh59hRfMmwoplATvtfWUXRztZKOPk7n2-Rlnx4-4SrDppzR9_gkHbnQsuqnIJwvhp1keaAqgFzjePq1zrZnHgxUzsVRyWPtznHgGDSLU3
http://www.cnblogs.com/panlijiao/archive/2012/10/14/2773881.html
一. C#创建组件:
1. VS2008新建一个项目,选择Visual C#, Class library
修改Properties下面的AssemblyInfo.cs文件,ComVisible属性设置为True,即:[assembly: ComVisible(true)]
2. 右击项目,选择“属性”,
选择“生成”选项卡,把“为COM互操作注册”勾选上
选择“签名”选项卡,把“为程序集签名”勾选上,在下面下拉选项中选择“<新建...>”,弹出对话框中的“密钥文件名称”栏填写名称(随便填写,后面会出现在VS资源管理器的工程下面*.snk),把“使用密码保护密钥文件”取消选择。
3. 开始编码,简单代码和重要注释
using System;using System.Collections.Generic;
using System.Runtime.InteropServices;//必须加上此项
using System.Linq;
using System.Text;
using System.IO.Ports;
namespace CSharpClassLib
{
[ComVisible(true)]
[Guid("9ABB648D-71A9-41d7-89C1-8D35328564F1")]
// GUID:用VS2008的命令提示符中输入:guidgen 就会出来它的窗口,
//在几个复选框选择最后一个Registry Format,点击New Guid,然后COPY就
//行了(以下如有guid的字符串,全部同样操作)
//注意在[Guid("....... 这个里面要去掉GUID前后的花括号
public interface MyCom_Interface{
void Initialize();
void Dispose();
int add(int a, int b);
}
[ComVisible(true)]
[Guid("DB7FB367-7217-4ff1-9805-673DAE4D19C9")]
[ProgId("CSharpClassLib.Class1")]
public class Class1:MyCom_Interface
{
public void Initialize() { }
public void Dispose() { }
public Class1() { }
public int add(int a, int b)
{
return a + b;
}
}
}
4. 编译生成.dll文件,还会有.tlb文件
5. 注册COM,在vs20080命令提示符下面,进入刚生成的dll所在的目录,
执行gacutil /i CSharpClassLib.dll
执行regasm CSharpClassLib.dll
以上都需要显示成功,如有错误,请检查。注意打开VS2008命令提示符需要用管理员身份。注册成功后可以在注册表(运行regedit)中查看(位置:HKEY_CLASSES_ROOT),可以直接搜索“CSharpClassLib”。注册表中找到这个COM,可以看到GUID
二,在QT 工程中使用这个COM
VS2008中需要添加链接库,在项目属性中的Linker->input 中添加QT必要的库,这里要加
QtCored4.lib
QtGuid4.lib
QAxContainer.lib
QAxContainerd.lib
QAxServer.lib
QAxServerd.lib
贴上源码:
#include "CommonHeader.h"
#include <QtCore/QtCore>
#include <QtGui/QtGui>
#include <ActiveQt/QAxObject>
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QAxObject object("DB7FB367-7217-4ff1-9805-673DAE4D19C9");
QVariantList params0;
params0 << QVariant(21);
params0 << QVariant(3);
int a = object.dynamicCall("add(int,int)",params0).toInt();
QLabel *label = new QLabel("Hello Qt!");
label->show();
return app.exec();
return 0;
}
- C#创建COM组件,QT调用COM组件简单测试(VS2008+QT4.6.4)
- QT调用COM组件
- VC6创建COM组件,Qt调用例子
- C#调用COM组件
- C#创建COM组件
- C#创建COM组件
- C#创建Com组件
- C#创建COM组件
- C#创建com组件
- C#创建COM组件
- C#创建com组件
- Qt调用COM组件 笔记
- c# 中调用COM组件
- C#调用C++COM组件
- C++调用C# COM组件
- C++调用C# COM组件
- C++调用C# com组件
- C++调用C# COM组件
- 模拟实现memmove函数
- VC单文档菜单栏如何固定
- 用 Flask 来写个轻博客 (19) — 以 Bcrypt 密文存储账户信息与实现用户登陆表单
- hibernate中多对一映射更新
- shell中date的一些用法
- C#创建COM组件,QT调用COM组件简单测试(VS2008+QT4.6.4)
- jsp自定义标签的问题Unable to load tag handler class
- MySQL5.7MHA+MaxScale2.0构建高可用环境
- [Lintcode]Minimum Size Subarray Sum 和大于S的最小子数组
- elasticsearch基础及java编程
- 【jzoj4908】【NOIP2016提高组】【愤怒的小鸟】【状态压缩动态规划】
- java -- 如何记住"=="与equals的区别?
- mac使用Sublime + PlantUML高效地画图
- 2016年兰州交通大学校园选拔赛