栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

解决 VC++ 2019/2022 无法编译,调用.NET CLR程序的问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解决 VC++ 2019/2022 无法编译,调用.NET CLR程序的问题

解决方案工程升级到 VC++ 2019/2022(Visual Studio)以后编译调用CLR虚拟机的程序代码失败,原因是新语法冲突。

解决办法有两个

1、降到 VC++ 2015/2017 及以下编译器构建程序

2、修改 mscorlib.tlh.h 头文件上面的语法冲突错误

为什么会导致语法错误,原因为:Micrsoft C/C++ 语言词法扩展.....

not、and、or,这VB/LUA运算符的既视感,就是这两个版本 VC++ 扩展的全新语法糖套路,但也正因为扩展的两个语法糖,导致了 mscorlib.tlh.h 头文件上面一些参数名为 “or” 的编译不过,因为VC++高版本编译器把它认为是关键字处理。

重点是这玩意还不能通过降低VC++编译器标准、VC++标准库来解决问题,是的,这又是一个最搞事的 Microsoft MSBuild 扩展,MMP。

有些童靴可能不懂,什么叫做 Microsoft MSBuild 扩展,意思是不通过 Microsoft MSBuild 进行编译代码,可能无法通过,各种语法错误让你知道花有多么红?!

Microsoft MSBuild 相当于是一个编译中间件,一个VS解决方案工程进行编译的时候,首先需要提交到 MSBuild 进行一次编译之后才能提交到具体编译器处理,简单理解你的解决方案代码要编多次才能输出,我们想要的具体目标程序二进制文件。

VC++ 自动从 MSCoreEE.tlb(.NET CLR虚拟机)类型库之中生成调用的头文件,文件到本工程的源目录下。

#include "mscorlib.tlh"

#pragma comment(lib, "MSCorEE.lib")

// import mscorlib.tlb (Microsoft Common Language Runtime Class Library).
#import "mscorlib.tlb" raw_interfaces_only				
    high_property_prefixes("_get","_put","_putref")		
    rename("ReportEvent", "InteropServices_ReportEvent")

修改:mscorlib.tlh.h,ITrackingHandler interface

struct __declspec(uuid("03ec7d10-17a5-3585-9a2e-0596fcac3870"))
ITrackingHandler : IDispatch
{
    //
    // Raw methods provided by interface
    //

      virtual HRESULT __stdcall MarshaledObject (
         VARIANT obj,
         struct _ObjRef * _or ) = 0;
      virtual HRESULT __stdcall UnmarshaledObject (
         VARIANT obj,
         struct _ObjRef * _or) = 0;
      virtual HRESULT __stdcall DisconnectedObject (
         VARIANT obj ) = 0;
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767012.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号