【问题标题】:Is it possible for an unmanaged C++ app to only load the CLR when it needs managed types?非托管 C++ 应用程序是否可以仅在需要托管类型时加载 CLR?
【发布时间】:2009-09-14 16:10:34
【问题描述】:

更重要的是,我有一个本机 C++ 应用程序,它可能永远不需要使用托管类型。我希望 CLR 一直处于卸载状态,直到我实际命中实际上依赖于托管类型的代码路径。

我曾尝试使用 Visual Studio 2005 中的 /clr 开关来完成此操作,但据我所知,一旦使用该开关,整个 C++ 应用程序就会成为托管应用程序。有没有办法只为某个编译单元或函数指定它?我尝试在我的测试应用程序中使用 #pragma unmanaged 标记我的 main() 函数,但这并没有阻止它在启动时加载 CLR。​​

【问题讨论】:

    标签: .net visual-studio visual-studio-2005 managed-c++


    【解决方案1】:

    如果您有一个混合模式 C++ DLL,CLR 将在您的 DLL / EXE 加载到进程中后立即加载。没有办法改变这种行为。

    实现您的目标的最佳方法是将您的 DLL 分成两部分

    1. 纯原生部件
    2. 需要使用托管代码的部分。

    您可以通过控制 #2 何时加载到进程中来控制 CLR 何时启动。这需要一些设置工作,但应该会得到您正在寻找的结果。

    【讨论】:

    • 感谢您的建议。你能解释一下如何实现这一点或指向解释它的资源吗?
    • 这会在链接器中使用延迟加载功能吗?
    猜你喜欢
    • 2010-11-23
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多