我在哪里初始化托管C ++ / CLI DLL?

时间:2008-12-02 20:10:28

标签: dll c++-cli

使用C ++ / CLI创建DLL时,是什么,或者我应该问,是否等同于DllMain?

对于无法从此初始化代码调用的内容有任何限制吗?

4 个答案:

答案 0 :(得分:4)

Dan:关于加载程序锁定,C ++ / CLI的CLR延迟加载以及混合模式二进制文件的正确初始化,我刚刚在the subject here上发布了。

或多或少,如果您使用的是混合模式二进制文件,则当您在DllMain()时,不得导致任何托管代码运行。

答案 1 :(得分:3)

从.NET 2.0开始,您就拥有了“模块初始化程序”。请参阅here for more information on how that solves the loader lock problemalso here

要直接回答您的问题,this page quotes the standard说: “对模块初始化程序中允许的代码没有限制。允许模块初始化程序运行并调用托管代码和非托管代码。”

答案 2 :(得分:1)

如果你在另一个托管项目(例如ac#应用程序)中使用dll,则不需要做任何事情......只要你尝试访问的类是ref类,您可以从任何其他托管应用程序访问它们。

答案 3 :(得分:0)

.Net dll的一个巨大优势是它们可以避免加载器锁定。一个副作用是没有DllMain。