非托管C ++应用程序是否可以仅在需要托管类型时加载CLR?

时间:2009-09-14 16:10:34

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

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

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

1 个答案:

答案 0 :(得分:2)

如果您有一个混合模式C ++ DLL,只要您的DLL / EXE加载到进程中,CLR就会加载。没有办法改变这种行为。

实现您所需要的最佳方法是将您的DLL分解为两部分

  1. 纯粹原生的部分
  2. 需要使用托管代码的部件。
  3. 您可以通过控制何时将#2加载到进程中来控制CLR启动的时间。这需要一些设置工作,但应该得到你正在寻找的结果。