by John Sohn (jsohn@columbus.rr.com) and Miguel de Icaza (miguel@ximian.com)
The maintainers:
- Dennis Hayes (DENNISH@Raytek.com)
+ Peter Bartok (peter@novonyx.com)
Backup: Miguel de Icaza (miguel@ximian.com)
Mailing list:
plans for this library have changed, the plans to use multiple
backends is no longer being pursued.
- We are now implementing this using the Wine library (because
+ We are now implementing this using the Wine as library (because
Windows.Forms applications require the message handling to be
compatible with Windows, look up the Control.Wndproc method
for details).
- Currently it is possible to use the Visual Studio solution in
- this directory to build the class libraries, and test the
- sample programs against our implementation.
-
To run and execute with the Mono runtime on linux, the story
is more complicated as we need to use the "WineLib" support in
Wine.
All of the real code is being done in the same was as it is being done
in the rest of the Mono assemblies.
-* Building System.Windows.Forms for Unix using Wine.
+* To run Windows.Forms Applications
- Since a WineLib application is a Windows application that is compiled under
- Unix/Linux as a shared library it needs to be started differently than other
- applications. The WineLib application is started as any other Windows
- application running under Wine using the wine command. You cannot simply link
- in libwine (gcc myapp.c -lwine) to use Win32 functions.
-
- In order to use WineLib/Win32 functions under Mono I have created a small
- "stub" application that embeds the Mono engine inside the WineLib application.
- This is basically a replacement for the "mono" command that can be used
- to call the Win32 API (using WineLib) within an application written for Mono.
-
- To get started I suggest installing Wine and Mono first if they are not
- already installed. I am usually using the latest Wine snapshots built from
- source and installed under /usr/local. Also be sure to build/use a version of
- Mono with garbage collection disabled as there is a problem using WineLib with
- garbage collection enabled (check the mono-list archives for this discussion).
- You can disable garbage collection when building mono by adding --with-gc=none
- to the configure command. In the mono directory I build mono as:
- ./configure --with-gc=none
-
- In the WINELib makefile you may have set these to the appropriate files and/or
- paths on your PC:
-
- X11R6_INCLUDE=/usr/X11R6/include
- WINE_INCLUDE=/usr/local/include/wine
- WINE_LIB=/usr/local/lib/wine
- LIBMONO=/usr/local/lib/libmono.a
-
- If you type make from the mcs/class/System.Windows.Forms/WINELib
- directory it should build:
-
- System.Windows.Forms.dll -
- The current (if largely incomplete) Windows Forms package.
-
- FormTest.exe, NativeWindowTest.exe, Test.exe -
- Test applications which link to and tests the System.Windows.Forms.dll
-
- monostub.exe.so -
- The WineLib application that starts the Mono/WineLib application. This
- small WineLib application embeds the Mono JIT engine allowing any Mono
- application running in it access to WineLib/Win32 function calls.
-
- Before starting any of the applications set the LD_LIBRARY_PATH to the
- current directory (so DllImport can find the monostub.exe.so library):
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
-
- To start any of the applications you type (from the WINELib directory):
- wine monostub.exe.so mono-winelibapp.exe
-
-
-
+ You must install the `winelib' module which is a couple of
+ libraries that are added to an existing Wine installation.