我有一个用C ++ / CLI编写的项目。托管代码中有一些类型,有些是完全本机代码。假设我在没有安装任何版本的.Net框架的机器上生成了DLL,有没有办法让另一个本机应用程序链接到我的“混合模式”Dll并只使用本机类型?我注意到,在我添加“/ clr”开关的那一刻,我的Dll自动依赖于几个.Net Framework Dlls(mscorjit,mscoree等),当我实际尝试使用其中定义的100%原生类型时,应用程序仍然尝试加载那些.Net Framework Dll(即使我没有在代码的那部分使用框架)。
那么,在这种情况下是否可以避免加载这些Dll? (正如我所看到的,另一个选择是创建另一个本机项目,它将包含所有本机类型,而不包含托管类型。)
由于
答案 0 :(得分:3)
没有。当您加载混合模式程序集(/ clr)时,在DllMain运行之后,.cctor会运行并初始化框架(如果尚未为应用程序设置它)。
如果没有这个,只要你调用一个需要托管API的函数,就会受到重创。有关详细信息,请参阅MSDN上的“Initialization of Mixed Assemblies”。
最好的选择是将您的原生API作为单独的DLL,并将混合模式程序集作为单独的项目,因此您可以根据需要单独加载它。