导航

  1.编译环境

  2.项目配置

    1.设置附加包含目录

    2.设置附加库目录

    3.设置附加依赖项

  3.CLR中各种定义

    1.接口定义

    2.类定义

    3.枚举定义

    4.属性定义

  4.CLR中各种使用

    1.类的实例化

    2.命名空间的使用

  5.CLR中数据类型的转换

    1.String ^ 到 QString 的转换

    2.QString 到 String ^ 的转换

    3.char * 到 String ^

    4.wchar_t * 到 String ^

    5.数组的转换

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<IntPtr>(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<IntPtr>(str));
delete str;
return ret;
}

3.char * 到 String ^

String ^ MarshalString(char* os) {
using namespace Runtime::InteropServices;
String ^ ret = Marshal::PtrToStringAnsi(static_cast<IntPtr>(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<Byte> ^ rbyteArray = gcnew array<Byte>(length + 2);
Marshal::Copy((IntPtr)byteArray.data(), rbyteArray, 0, length);
ret = rbyteArray;

C#调用C++(QT5.5.1项目)的C++/CLI(CLR项目)项目技术笔记的更多相关文章

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

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

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

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

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

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

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

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

  5. 201871010129-郑文潇 实验二 个人项目—《D{0-1}背包问题 》项目报告

    项目 内容 课程班级博客链接 课程链接 这个作业要求链接 [作业要求](https://www.cnblogs.com/nwnu-daizh/p/14552393.html) 我的课程学习目标 1.掌 ...

  6. 201871030135-姚辉 实验二 个人项目—《D{0-1} KP》项目报告

    项目 内容 课程班级博客链接 课程班级博客链接 这个作业要求链接 这个作业要求链接 我的课程学习目标 (1)掌握软件项目个人开发流程.(2)掌握Github发布软件项目的操作方法. 这个作业在哪些方面 ...

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

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

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

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

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

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

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

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

随机推荐

  1. 浅谈如何检查Linux中开放端口列表

    给大家分享一篇关于如何检查Linux中的开放端口列表的详细介绍,首先如果你想检查远程Linux系统上的端口是否打开请点击链接浏览.如果你想检查多个远程Linux系统上的端口是否打开请点击链接浏览.如果 ...

  2. ServiceStack.Redis记录

    一.事务 (一)AcquireLock方法 1.说明:申请对一个Key加锁(期间其他对象不能访问). 2.带using的使用,或带过期时间参数,否则锁不会自动释放. using (RedisCache ...

  3. FPGA中分数分频器的实现代码

    module clkFracDiv( output reg clkout, input rstn, input refclk, :] fenzi, :] fenmu ); :] rstn_syn; : ...

  4. 用python处理csv文件

    1.准备csv文件(这里是平安银行的统计表:下载并另存为pingan.csv) >>> from urllib import urlretrieve >>> url ...

  5. c# 字符串中多个连续空格转为一个空格

    #region 字符串中多个连续空格转为一个空格 /// <summary> /// 字符串中多个连续空格转为一个空格 /// </summary> /// <param ...

  6. .Net程序员 初学Ubuntu ,配置Nignix

    1.安装VM虚拟机 2.升级VI编辑器 3.安装Nginx 4.测试localhost 5.编辑配置文件 仅仅用了记录一个过程,不会太详细 1.安装虚拟机,网上一大片,不是特别难 2.为什么要升级VI ...

  7. webpack之牛刀小试 打包并压缩html、js

    1.创建项目文件夹test,在文件夹下创建src文件夹用来存放源码,在src文件夹下创建index.html/index.js两件文件. 我们的最终目的是将这两个文件打包压缩并输出到/test/dis ...

  8. Android Studio升级3.2.1后的合并XML出错的解决方案

    升级到3.2.1版本之后,遇到了合并XML出错的问题.错误内容大概如下: 当大家看到这个问题的时候,可能会有一行是可以点击的文件目录,点击到报错的地方. 如果没有可以点击的地方,也可以根据目录和 “行 ...

  9. 在Apache上http强制跳转到https

    https已经配置完成,也可以正常使用,但输入域名或http加域名时也一样可以打开网站,于是想强制使用https 大概百度了一下方法,感觉与之前设置二级域名绑定二级目录时差不多 首先,修改httpd. ...

  10. Web前端-Vue.js必备框架(一)

    Web前端-Vue.js必备框架(一) <!DOCTYPE html> <html lang="en"> <head> <meta cha ...