1

我有一个用 C++/CLI 编写的项目。有些类型存在于托管代码中,有些则完全是本机代码。假设我在没有安装任何版本的 .Net 框架的机器上生成了 DLL,有没有办法让另一个本机应用程序与我的“混合模式”DLL 链接并仅使用本机类型?我注意到,在我添加“/clr”开关的那一刻,我的 Dll 自动依赖于几个 .Net Framework Dll(mscorjit、mscoree 等),当我实际尝试使用其中定义的 100% 本机类型时,应用程序仍然尝试加载那些 .Net Framework Dll(即使我没有在代码的那部分使用框架)。
那么,在这种情况下是否可以避免加载这些 Dll?(如我所见,另一种选择是创建另一个本机项目,该项目将包含所有本机类型,不包括托管类型)。

谢谢

4

1 回答 1

3

否。当您加载混合模式程序集 (/clr) 时,在 DllMain 运行之后,.cctor 将运行并初始化框架,如果尚未为应用程序设置它。

没有这个,一旦你调用了一个需要托管 API 的函数,就会有很大的影响。有关详细信息,请参阅MSDN 上的“混合程序集的初始化”。

最好的选择是使您的本机 API 成为一个单独的 DLL,并将混合模式程序集作为一个单独的项目,以便您可以在需要时单独加载它。

于 2009-10-06T19:23:12.477 回答