避免在 C++/CLI 项目中加载 .Net Dlls?
Posted
技术标签:
【中文标题】避免在 C++/CLI 项目中加载 .Net Dlls?【英文标题】:Avoid loading .Net Dlls in a C++/CLI project? 【发布时间】:2009-10-06 19:19:47 【问题描述】:我有一个用 C++/CLI 编写的项目。有些类型存在于托管代码中,有些则完全是本机代码。假设我在没有安装任何版本的 .Net 框架的机器上生成了 DLL,有没有办法让另一个本机应用程序与我的“混合模式”DLL 链接并仅使用本机类型?我注意到,在我添加“/clr”开关的那一刻,我的 Dll 自动依赖于几个 .Net Framework Dll(mscorjit、mscoree 等),当我实际尝试使用其中定义的 100% 本机类型时,应用程序仍会尝试加载那些 .Net Framework Dll(即使我没有在代码的那部分使用框架)。 那么,在这种情况下是否可以避免加载这些 Dll? (如我所见,另一种选择是创建另一个原生项目,该项目将包含所有原生类型,但不包含托管类型)。
谢谢
【问题讨论】:
【参考方案1】:没有。当您加载混合模式程序集 (/clr) 时,在 DllMain 运行之后,.cctor 会立即运行并初始化框架(如果尚未为应用程序设置框架)。
没有这个,一旦你调用了一个需要托管 API 的函数,就会有很大的影响。有关详细信息,请参阅 MSDN 上的“Initialization of Mixed Assemblies”。
最好的选择是让您的原生 API 成为一个单独的 DLL,并将混合模式程序集作为一个单独的项目,这样您就可以在需要时单独加载它。
【讨论】:
以上是关于避免在 C++/CLI 项目中加载 .Net Dlls?的主要内容,如果未能解决你的问题,请参考以下文章
在托管 DLL 中加载 C++ DLL 时出现 EEFileLoadException