Hi Vincent,
thank you for your help so far and sorry for disturbing you with
my patches again so soon.
While looking a bit further into my app under Wine I found out
that some mixed assemblies are completely broken under Wine/Mono due
to the fact that native entry point is not called at all. It relates
to both 32 bit and 64 bit. 32 bit works fine under native MS .Net
which apparently does call the entry point. The entry point address
is present in IMAGE_COR20_HEADER (when appropriate flag is set in
Flags member). It is DllMain-type entry point having the same
parameters. This entry point does static initialization, e. g. calls
all the constructors for static classes.
I am attaching preliminary patch to illustrate what I am talking
about. It would be great if you could give some high level feedback
on whether you like the idea of doing this in general before I will
be spamming it to wine-patches.
The potential issue which I can imagine with it is that if there
are some old apps (built with VS 2003) which called CLR code in
native init but by chance worked if native init was not called at
all, may stop working. MSDN says that such apps could
non-deterministically deadlock when loaded; with Wine/Mono they will
lock deterministically I think (
https://msdn.microsoft.com/en-us/library/ms173266.aspx). Still I
suppose the issue with entry point should be addressed somehow since
it affects "normal" newer applications.
Regards,
Paul.