c调用c++ qt_C#调用C++(QT5.5.1项目)的C++/CLI(CLR项目)项目技术笔记

本文介绍了在Windows10环境下,使用VS2010和Qt5.5.1进行C/C++与Qt的结合开发,特别是C#(CLR项目)调用C++/CLI的步骤。内容涵盖项目配置、接口定义、类定义、数据类型转换,如String^与QString之间的转换,并提供了转换方法的示例代码。
摘要由CSDN通过智能技术生成

导航

1.编译环境

系统:windows10

环境:VS2010 + Qt5.5.1

2.项目配置

1.设置附加包含目录

1.此项设置包含的头文件,需要填入用到的.h文件目录

2.下图中的QTDIR是Qt5.5.1安装目录环境变量(默认路径:C:\Qt\Qt5.5.1\5.5\msvc2010)

2.设置附加库目录

1.此项设置引用的lib目录,如下图。

3.设置附加依赖项

1.此处设置指定的lib文件,一般不用填写。

3.CLR中各种定义

1.接口定义

2.类定义

3.枚举定义

4.属性定义

1.接口中定义:

2.类中定义:

4.CLR中各种使用

1.类的实例化

所有.net对象都需要使用gcnew进行创建,gcnew创建的对象不需要自己手动释放内存。

GTable ^ ret = gcnew GTable();

2.命名空间的使用

命名空间用于限定类,不同于C#,这里使用::进行分割。

virtual MyNameSpace::ITable ^ GetTable(int index);

5.CLR中数据类型的转换

1.String ^ 到 QString 的转换

QString MarshalString(String ^ s)

{

using namespace Runtime::InteropServices;

const char* chars =

(const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();

string str = chars;

QString ret = str.c_str();

Marshal::FreeHGlobal(IntPtr((void*)chars));

return ret;

}

2.QString 到 String ^ 的转换

String ^ MarshalStringLocal8(QString os)

{

using namespace Runtime::InteropServices;

if (os.isNull()) return nullptr;

QByteArray data = os.toLocal8Bit();

char * str = new char[data.length() + 1];

strcpy_s(str, data.length() + 1, data.constData());

String ^ ret = Marshal::PtrToStringAnsi(static_cast(str));

delete str;

return ret;

}

String ^ MarshalString(QString os)

{

using namespace Runtime::InteropServices;

QByteArray data = os.toUtf8();

char * str = new char[data.length() + 1];

strcpy_s(str, data.length() + 1, data.constData());

String ^ ret = Marshal::PtrToStringAnsi(static_cast(str));

delete str;

return ret;

}

3.char * 到 String ^

String ^ MarshalString(char* os) {

using namespace Runtime::InteropServices;

String ^ ret = Marshal::PtrToStringAnsi(static_cast(os));

return ret;

}

4.wchar_t * 到 String ^

String ^ MarshalString(wchar_t* os) {

using namespace Runtime::InteropServices;

String ^ ret = Marshal::PtrToStringUni((IntPtr)os);

return ret;

}

5.数组的转换

using namespace System::Runtime::InteropServices;

QByteArray byteArray = obj.toByteArray();

int length = byteArray.count();

array ^ rbyteArray = gcnew array(length + 2);

Marshal::Copy((IntPtr)byteArray.data(), rbyteArray, 0, length);

ret = rbyteArray;

Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)

Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)    转 https://blog.csdn.net/lhl1124281072/article/details/800 ...

Go项目的测试代码2(项目运用)

上一篇文章介绍了最基本的测试代码的写法.Go项目的测试代码(基础) 这里简单的共享一下我在项目中使用的方式. 项目结构 我们实际项目中, 结构简单地分了控制层controllers和模块层models ...

Django(一)基础:安装环境、创建项目、视图、创建一个项目的应用(app)

一.安装环境 参考: https://docs.djangoproject.com/zh-hans https://www.runoob.com/django/django-install.html ...

Win32控制台、Win32项目、MFC项目、CLR控制台、CLR空项目、空项目区别

转载:https://blog.csdn.net/zfmss/article/details/79244696 1.Win32控制台 初始代码模版以main为程序入口,默认情况下,只链接C++运行时库 ...

VS自定义项目模板:[2]创建VSIX项目模板扩展

VS自定义项目模板:[2]创建VSIX项目模板扩展 听语音 | 浏览:1237 | 更新:2015-01-02 09:21 | 标签:软件开发 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师 ...

myeclipse如何修改Web项目名称,eclipse如何修改项目名字

myeclipse如何修改Web项目名称 1.复制一个现有的项目,重命名项目名称 2.这里的项目名称重新命名了,但是Web项目本质下的名称还是没有改变的.所以需要更改,更改方法-->选择项目右击 ...

HttpClient_001_初步实现项目01的servlet,与项目02的servlet,之间数据访问

HttpClient_001_初步实现项目01的servlet,与项目02的servlet,之间数据访问 代码下载地址: http://download.csdn.net/detail/poiuy19 ...

Intellij IDEA 的使用(创建项目、导入项目、同时部署多个项目、JRebel)等常见eclipse、myeclipse换idea必看

第一篇:Intellij IDEA 的使用 1.黑色主题 中文乱码修改 2.WEB项目的部署 以及自动编译 3.多项目的同时部署 4.相关插件提高工作效率 1.JRebel插件 实现热部署 2.Tas ...

eclipse中本地项目怎么和svn中的项目关联?

网速不好,通过别的方式把项目下载到本地硬盘,然后导入eclipse,代码修改后怎么提交到svn呢? 这个纠结了好久的问题... 首先要确定eclipse中安装了svn插件. 然后在“svn资源库研究” ...

让项目管理理论“落地”——读《IT项目经理成长手记》有感

最近利用业余时间阅读了一本好书--(潘东.韩秋泉著).本书的两位作者是神州数码(中国本土最大的整合IT服务提供商)的高管,在书中他们介绍了神州数码在IT项目管理领域 ...

随机推荐

jdk(多版本)安装注意!

♣安装jdk和jre ♣jdk配置环境变量和测试 ♣安装多版本jdk和切换 ♣jdk下的jre和第二次安装的jre的区别 注意点: 1.jdk版本需要是64位 2.安装JDK 选择安装目录 安装过程中 ...

MINA2 框架详解(转)

Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP.UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务.虚拟机管道通信服务等),M ...

FragmentTabHost

FragmentTabHost public class FragmentTabHost  extends TabHost implements TabHost.OnTabChangeListener ...

搭建spring+mybatis+struts2环境的配置文件

1.web.xml配置 <?xml version="1.0" encoding="UTF-8"?>

初用jquery

---恢复内容开始--- 这两天在顶顶大人的指导下,利用jquery框架做了一个动态切换的小页面.最终效果图: 这么萌萌哒的图片让我觉得一直在测试也没那么累.实现功能如下: 1.打开页面时,自动切换, ...

NetCore1&period;1&plus;Linux部署初体验

1.环境准备 Centaos7+Win10 虚拟机 Win10安装VS2017 https://www.asp.net/downloads注意勾选下.Net Core 3.Centaos安装netco ...

Python网络编程篇之socket

1 socket 插座?呵呵,想多了,翻译过来意思是套接字! A network socket is an internal endpoint for sending or receiving dat ...

&lbrack;NOI2015&rsqb;寿司晚宴(状压dp)

为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴.小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿司,编号1,2,3,⋯,n-1,其中第种 ...

MVC,MVP设计模式

什么是MVP MVP是模型(Model).视图(View).主持人(Presenter)的缩写,分别代表项目中3个不同的模块. 模型(Model):负责处理数据的加载或者存储,比如从网络或本地数据库获 ...

React Native入坑记录

1.render中如果使用props,直接用this.props.xxx,如果是在JSX中,用{this.props.xxx} 2.警告each child in an array or iterat ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值