mirror of
git://source.winehq.org/git/wine.git
synced 2024-07-21 21:14:11 +00:00
Remove obsolete info about wrappers, they are no longer necessary.
This commit is contained in:
parent
6d4e39233a
commit
ceecf12384
|
@ -149,84 +149,6 @@
|
||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1 id="init-problems">
|
|
||||||
<title id="init-problems.title">Initialization problems</title>
|
|
||||||
<para>
|
|
||||||
Initialization problems occur when the application calls the Win32 API
|
|
||||||
before Winelib has been initialized. How can this happen?
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
Winelib is initialized by the application's <function>main</function>
|
|
||||||
before it calls the regular <function>WinMain</function>. But, in C++,
|
|
||||||
the constructors of static class variables are called before the
|
|
||||||
<function>main</function> (by the module's initializer). So if such
|
|
||||||
a constructor makes calls to the Win32 API, Winelib will not be
|
|
||||||
initialized at the time of the call and you may get a crash. This
|
|
||||||
problem is much more frequent in C++ because of these class
|
|
||||||
constructors but could also, at least in theory, happen in C if you
|
|
||||||
were to specify an initializer making calls to Winelib. But of
|
|
||||||
course, now that you are aware of this problem you won't do it :-).
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
Further compounding the problem is the fact that Linux's (GNU's?)
|
|
||||||
current dynamic library loader does not call the module
|
|
||||||
initializers in their dependency order. So even if Winelib were to
|
|
||||||
have its own initializer there would be no guarantee that it would be
|
|
||||||
called before the initializer of the library containing this static
|
|
||||||
variable. Finally even if the variable is in a library that your
|
|
||||||
application links with, that library's initializer may be called
|
|
||||||
before Winelib has been initialized. One such library is the MFC.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
The current workaround is to move all the application's code in a
|
|
||||||
library and to use a small Winelib application to dynamically load
|
|
||||||
this library. Tus the initialization sequence becomes:
|
|
||||||
</para>
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem>
|
|
||||||
<para>
|
|
||||||
the wrapper application starts.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>
|
|
||||||
its empty initializer is run.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>
|
|
||||||
its <function>main</function> is run. Its first task is to
|
|
||||||
initialize Winelib.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>
|
|
||||||
it then loads the application's main library, plus all its
|
|
||||||
dependent libraries.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>
|
|
||||||
which triggers the execution of all these libraries initializers
|
|
||||||
in some unknown order. But all is fine because Winelib has
|
|
||||||
already been initialized anyway.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
<listitem>
|
|
||||||
<para>
|
|
||||||
finally the main function calls the <function>WinMain</function>
|
|
||||||
of the application's library.
|
|
||||||
</para>
|
|
||||||
</listitem>
|
|
||||||
</itemizedlist>
|
|
||||||
<para>
|
|
||||||
This may sound complex but Winemaker makes it simple. Just specify
|
|
||||||
<option>--wrap</option> or <option>--mfc</option> on the command line
|
|
||||||
and it will adapt its makefiles to build the wrapper and the
|
|
||||||
application library.
|
|
||||||
</para>
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1 id="com-support">
|
<sect1 id="com-support">
|
||||||
<title id="com-support.title">VC's native COM support</title>
|
<title id="com-support.title">VC's native COM support</title>
|
||||||
<para>
|
<para>
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<bookinfo>
|
<bookinfo>
|
||||||
<title>Winelib User's Guide</title>
|
<title>Winelib User's Guide</title>
|
||||||
<!-- Until we learn how to format this thing nicely,
|
<!-- Until we learn how to format this thing nicely,
|
||||||
we can't really incude it -->
|
we can't really include it -->
|
||||||
<!--authorgroup>
|
<!--authorgroup>
|
||||||
<author>
|
<author>
|
||||||
<firstname>Wilbur</firstname>
|
<firstname>Wilbur</firstname>
|
||||||
|
|
Loading…
Reference in a new issue