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

标签 visual-c++ c++-cli

我有一个项目,其中包含一些对性能敏感的 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/

相关文章:

c++ - 在Windows窗体c++/cli程序中为已定义的标识符获取未定义的标识符错误

.net - 错误 C3224 : 'System::Nullable' : no overloaded generic class takes '1' generic type arguments

用于大型 C 库的 C++/CLI 或 C# P/Invoke,调用外部函数

visual-studio-2008 - C++/CLI 中 return 语句的部分覆盖

c++ - 需要了解良好的 C++ 反射 API(用于 RuntimeType Identification -RTTI 和运行时调用)

c++ - 如何从 C++ 中的资源文件加载游标组?

c++ - 如何在udp c++​​中发送和接收大量数据

c++ - 禁用某些方法的 Visual C++ 虚函数覆盖警告

c++ - 使用 psapi.h 在 Microsoft Visual C++ 6.0 中编译一个 exe

.net - 如何在异步方法中使用 AcceptTcpClient