2009-09-14 31 views
0

更重要的是,我有一个本地C++应用程序,可能永远不需要使用托管类型。我希望CLR保持卸载状态,直到实际上取决于托管类型的代码路径实际上被击中。非托管C++应用程序是否可以在需要托管类型时才加载CLR?

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

回答

2

如果你有一个混合模式C++ DLL CLR将尽快加载为您的DLL/EXE加载到进程。没有办法改变这种行为。

实现你在找什么,最好的办法是你的DLL分解成两个部分

  1. 部件,是纯粹的原生
  2. 零部件需要使用托管代码。

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

+0

感谢您的建议。你能解释一下如何实现这一点,或者指出解释它的资源? – 2009-09-14 17:34:58

+0

这会使用链接器中的延迟加载功能吗? – 2009-09-14 18:28:52