• 13580阅读
  • 19回复

[提问]Qt5怎么启用公共语言运行时支持(/CLR) [复制链接]

上一主题 下一主题
离线yanwuyue
 

只看楼主 倒序阅读 楼主  发表于: 2016-06-25
— 本帖被 XChinux 设置为精华(2017-05-10) —
最近项目里需要调用C#代码,需要C++里的公共语言运行时支持(/CLR)

VS选项设置里可以直接启用,Qt5怎么启用,

总不能C#->VS++->Qt5这样把
离线yanwuyue

只看该作者 1楼 发表于: 2016-06-27
没有人调用过C#的代码吗?
离线zhang2349

只看该作者 2楼 发表于: 2016-06-27
应该加一些编译参数的吧
我直接用vs的
离线yanwuyue

只看该作者 3楼 发表于: 2016-06-30
回 zhang2349 的帖子
zhang2349:应该加一些编译参数的吧
我直接用vs的 (2016-06-27 16:14) 

VS下的我会,不知道Qt下怎么启用/CLR,
我现在是Qt拖一个VC的dll,VC的dll再拖一个C#的dll
离线yanwuyue

只看该作者 4楼 发表于: 2016-06-30
终于在一篇位置中找到

QMAKE_CXXFLAGS += /clr

不过马上报错

cl: 命令行 error D8016 :“/clr”和“/EHs”命令行选项不兼容

离线zhang2349

只看该作者 5楼 发表于: 2016-07-01
你可以在vs工程属性里看 他加了一些什么参数
我看启用clr  /EHs 会变成 /EHa


我是直接用VS写QT和CLR的,qt里直接用调C#的代码
离线yanwuyue

只看该作者 6楼 发表于: 2016-07-05
google上不停的搜索,零零散散的资料,
终于还是让我解决了
pro里面加编译参数:
  1. QMAKE_CXXFLAGS += /clr
  2. win* {
  3.    QMAKE_CXXFLAGS_EXCEPTIONS_ON = /EHa
  4.    QMAKE_CXXFLAGS_STL_ON = /EHa
  5. }

代码里显性调用C#的dll
  1. #using <I:/bin/Release/NL70ITX(CS).dll>


运行时C#dll必须和你的主程序在一个目录下,
比如目录a下有a.exe  目录b/b.dll  b.dl调用c#.all,c#.all 还是得还a.exe一个目录
离线yanniupai

只看该作者 7楼 发表于: 2017-05-10
最新的Qt5.8已经不需要改pro文件了,直接使用如下引用即可,运行也要把dll拷贝到exe目录,我这有我编写的一个示例。 MyFirst.rar (1943 K) 下载次数:182
#using <I:/bin/Release/NL70ITX(CS).dll>
本帖提到的人: @yanwuyue
离线fengwujiutan

只看该作者 8楼 发表于: 2017-10-12
回 yanniupai 的帖子
yanniupai:最新的Qt5.8已经不需要改pro文件了,直接使用如下引用即可,运行也要把dll拷贝到exe目录,我这有我编写的一个示例。[图片]
#using <I:/bin/Release/NL70ITX(CS).dll> (2017-05-10 11:19) 

你好,我按照你的方法,尝试了一下在头文件中添加
#include <vcclr.h>
都报错,提示没有该文件,能否再次请教一下
没伞的孩子应努力奔跑
离线fengwujiutan

只看该作者 9楼 发表于: 2017-10-13
回 yanwuyue 的帖子
yanwuyue:google上不停的搜索,零零散散的资料,
终于还是让我解决了
pro里面加编译参数:
QMAKE_CXXFLAGS += /clr
win* {
....... (2016-07-05 14:02) 

你好,我复制代码后放到pro文件中,编译不过,提示error: /clr: No such file or directory  
error: /EHa: No such file or directory ,请问怎么解决?谢谢,能否留个联系方式,交流一下
没伞的孩子应努力奔跑

只看该作者 10楼 发表于: 2018-12-05
回 yanwuyue 的帖子
yanwuyue:google上不停的搜索,零零散散的资料,
终于还是让我解决了
pro里面加编译参数:
QMAKE_CXXFLAGS += /clr
win* {
....... (2016-07-05 14:02) 

开启了clr不能断点调试吗?  我打断点提示出现异常
离线cj123sn

只看该作者 11楼 发表于: 2019-06-06
回 yanwuyue 的帖子
yanwuyue:google上不停的搜索,零零散散的资料,
终于还是让我解决了
pro里面加编译参数:
QMAKE_CXXFLAGS += /clr
win* {
....... (2016-07-05 14:02) 

多谢前人栽树,同样的问题得以解决,多谢
离线yanwuyue

只看该作者 12楼 发表于: 2019-06-07
这么久了还能收到回复
离线cj123sn

只看该作者 13楼 发表于: 2019-06-10
回 行走的荷尔蒙 的帖子
行走的荷尔蒙:开启了clr不能断点调试吗?  我打断点提示出现异常
 (2018-12-05 12:23) 

我也出现这样的问题了,最后怎么解决的啊
离线15151872298

只看该作者 14楼 发表于: 2019-08-09
我遇到的问题是Qt开启clr以后出现很多错误
C:\Qt\Qt5.12.0\5.12.0\msvc2015_64\include\QtCore\qhashfunctions.h:109: error: C2440: “reinterpret_cast”: 无法从“nullptr”转换为“quintptr”
F:\ZhongChaoWork\2019-8-9\MyFirst\untitled\mainwindow.h:16: error: C1192: “C:\Program Files (x86)\ABB Industrial IT\Robotics IT\SDK\PCSDK 6.05\ABB.Robotics.Controllers.PC.dll”
“系统找不到指定的路径。”上的 #using 失败
离线15151872298

只看该作者 15楼 发表于: 2019-08-09
回 15151872298 的帖子
15151872298:我遇到的问题是Qt开启clr以后出现很多错误
C:\Qt\Qt5.12.0\5.12.0\msvc2015_64\include\QtCore\qhashfunctions.h:109: error: C2440: “reinterpret_cast”: 无法从“nullptr”转换为“quintptr”
F:\ZhongChaoWork\2019-8-9\MyFirst\untitled\mainwindow.h:16: error: C1192: “C .. (2019-08-09 09:15) 

最后我删掉一个强制转换居然就可以用了
离线frenzyx

只看该作者 16楼 发表于: 2022-09-28
回 15151872298 的帖子
15151872298:我遇到的问题是Qt开启clr以后出现很多错误
C:\Qt\Qt5.12.0\5.12.0\msvc2015_64\include\QtCore\qhashfunctions.h:109: error: C2440: “reinterpret_cast”: 无法从“nullptr”转换为“quintptr”
F:\ZhongChaoWork\2019-8-9\MyFirst\untitled\mainwindow.h:16: error: C1192: “C .. (2019-08-09 09:15) 

请教一下,我用“#using </.../..../XXXX.dll>”时,显示#using是不存在的宏,我的是Qt5.14,这个和版本有关系吗?
离线chris89

只看该作者 17楼 发表于: 2022-10-18
回 frenzyx 的帖子
frenzyx:请教一下,我用“#using </.../..../XXXX.dll>”时,显示#using是不存在的宏,我的是Qt5.14,这个和版本有关系吗? (2022-09-28 10:40)

请教一下,遇到相同问题,有解决方案吗?感谢
离线hlhsppx123

只看该作者 18楼 发表于: 2023-08-03
回 yanniupai 的帖子
yanniupai:最新的Qt5.8已经不需要改pro文件了,直接使用如下引用即可,运行也要把dll拷贝到exe目录,我这有我编写的一个示例。[图片]
#using <I:/bin/Release/NL70ITX(CS).dll> (2017-05-10 11:19) 

为什么我试了你这个例子#using报错 error: invalid preprocessing directive
Qt5.9.7    MSVC2017
离线hlhsppx123

只看该作者 19楼 发表于: 2023-08-09
这貌似不是好的解决方案,qt的基础库好像和clr冲突,我吧qt creator开发的项目移植到visual studio上没有问题但是启用公共语言运行时支持后出现了大量问题,最后虽然编译通过了,但是qt的一些功能直接失效了。
GPT:
是的,启用公共语言运行时支持(/clr)后,Qt的一些功能可能会受到影响或失效。这是因为CLR(Common Language Runtime)和Qt的基础库之间存在一些不兼容性。

公共语言运行时支持(/clr)允许在C++代码中使用.NET框架,但它改变了代码的执行环境和行为。Qt是一个独立的C++框架,它的功能和特性是在非托管环境下设计和实现的。因此,在启用公共语言运行时支持后,Qt的某些功能可能无法正常工作。

在你的情况下,当你使用#pragma unmanaged将代码标记为非托管时,Qt的基础库可以正常工作。但是,当你使用#pragma managed将代码切回托管状态时,Qt的功能可能会受到影响,导致按钮等控件无法正常响应。
总之,启用公共语言运行时支持后,Qt的功能可能受到限制。
快速回复
限100 字节
 
上一个 下一个