C#创建COM组件,QT调用COM组件简单测试(VS2008+QT4.6.4)
2016-11-27 18:28
876 查看
参考:
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;
}
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#调用存储过程的方法,和简单存储过程创建的方法实例。【转载】为入门的朋友引路,大家互相学习。
- c#创建vc可调用的com组件方法分享
- C# 创建、部署和调用WebService的简单示例 webservice 可以用于分布式应用程序之间的交互,和不同程序之间的交互。 概念性的东西就不说太多,下面开始创建一个简单的webservi
- C#创建VC可调用的COM组件
- C# 创建、部署和调用WebService简单示例
- C# 创建、部署和调用WebService的简单示例
- C# 创建、部署和调用WebService的简单示例
- VS2010中创建并用C++及C#测试COM组件
- C++ VS 2008中ATL的创建,使用。并在C++项目以及C#项目中进行调用测试
- C++ VS 2008中ATL的创建,使用。并在C++项目以及C#项目中进行调用测试
- C# WebService创建、发布、调用的简单例子
- C++ VS 2008中ATL的创建,使用。并在C++项目以及C#项目中进行调用测试
- VS2010中创建COM组件并用C++及C#测试
- Hessian学习之(一):简单测试 + C#调用Java服务
- 使用C#制作简单dll文件,并测试调用
- VC6创建COM组件,Qt调用例子
- C#调用C++的COM组件简单示例
- c#创建调用bat文件简单案例
- C#创建VC可调用的COM组件
- C# 创建、部署和调用WebService的简单示例