gpt4 book ai didi

visual-c++ - 有没有办法检测 #pragma unmanaged 在 C++/CLI 中是否有效?

转载 作者:行者123 更新时间:2023-12-03 21:41:35 26 4
gpt4 key购买 nike

我有一个项目,其中包含一些对性能敏感的 native C++ header ,大量使用模板。对于这个项目,我们还包装了 header 并添加了一些胶水代码,以将功能公开给 c# 和其他 .NET 语言。我们将此 header 称为“layout.h”,并假设它是我无法更改的第三方 header 。

在混合模式的 C++/CLI 程序集中,从代码中 #pragma unmanaged (或 #pramga managed(push,off) ) 的位置出现错误和 #include 相对容易。发生这种情况时,模板会生成 IL,并且在运行代码时我会获得额外的托管/非托管转换,并且性能会下降。

我的问题是是否有一种方法可以在#include 之前进行编译时检查,以便如果我不小心从错误的上下文中#include 编译失败。

// File1.cpp, compiled in a mixed mode C++/CLI assembly with /clr
ASSERT_UNMANAGED()
#include <layout.h>

我天真的第一次尝试检查了#ifdef _MANAGED,但无论我是否在#pragma 非托管代码块中,它总是被定义。

最佳答案

pragma 指令必须直接插入到包含文件中。这样,在您包含文件的任何地方都会声明一个非托管部分。

抱歉,您必须修改包含文件。

关于visual-c++ - 有没有办法检测 #pragma unmanaged 在 C++/CLI 中是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7039132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com