Where do I initialize a managed C++/CLI DLL?

2020-04-08 12:05发布

问题:

What is, or should I ask, is there, an equivalent to DllMain when creating a DLL using C++/CLI?

Are there any restrictions on what cannot be called from this initialization code?

回答1:

Dan: With respect to the loader lock, C++/CLI's delay load of the CLR and proper initialization for a mixed mode binary, I just posted yesterday on the subject here.

More or less, if you have a mixed mode binary, you must not cause any managed code to run while you are in DllMain().



回答2:

Since .NET 2.0 you have a "module initializer". See here for more information on how that solves the loader lock problem and also here

For a direct answer to your question, this page quotes the standard which says: "There are no limitations on what code is permitted in a module initializer. Module initializers are permitted to run and call both managed and unmanaged code."



回答3:

If you're using the dll in another managed project (a c# application for example), you don't need to do anything... As long as the classes you try to access are ref classes, you can access them from any other managed application.



回答4:

One giant advantage of .Net dlls is that they avoid the loader lock. One side effect is that there's no DllMain.



标签: dll c++-cli