[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-patches
Subject: Re: ICMP implementation
From: Eric Pouech <Eric.Pouech () wanadoo ! fr>
Date: 1999-10-31 21:42:15
[Download RAW message or body]
since François had lots of interesting question on how to add a new DLL,
here's an addition to DEVELOPERS-HINTS file to explain (I hope) what needs to
be done.
(I took also the opportunity to fix the tree description which was *slightly* outdated)
A+
--
---------------
Eric Pouech (http://perso.wanadoo.fr/eric.pouech/)
"The future will be better tomorrow", Vice President Dan Quayle
["devhint-dll.diff" (text/plain)]
Index: DEVELOPERS-HINTS
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/DEVELOPERS-HINTS,v
retrieving revision 1.5
diff -u -r1.5 DEVELOPERS-HINTS
--- DEVELOPERS-HINTS 1999/07/18 13:28:59 1.5
+++ DEVELOPERS-HINTS 1999/10/31 21:30:24
@@ -28,7 +28,7 @@
win16drv/ -> see below
ttydrv/ - tty display driver
psdrv/ - PostScript graphics driver
- metafiledrv/ - metafile drivr
+ metafiledrv/ - metafile driver
enhmetafiledrv/ - enhanced metafile driver
objects/ - logical objects
@@ -45,24 +45,46 @@
avifil32/ - COM object to play AVI files
comctl32/ - common controls
commdlg/ - common dialog boxes (both 16 & 32 bit)
+ dplayx/ - DirectX dplayx
+ dsound/ - DirectX dsound
imagehlp/ - PE (Portable Executable) Image Helper lib
- msacm/ - audio compression manager (multimedia)
- msacm32/ - audio compression manager (multimedia)
+ imm32/
+ lzexpand/ - Liv-Zempel compression/decompression
+ mpr/ - Multi-Protocol Router (interface to various
+ network transport protocols)
+ msacm/ - audio compression manager (multimedia) (16 bit)
+ msacm32/ - audio compression manager (multimedia) (32 bit)
+ msnet/
+ msvideo/ - 16 bit video manager
+ ole32/ - 32 bit OLE 2.0 librairies
+ oleaut32/ - 32 bit OLE 2.0 automation
+ olecli/ - 16 bit OLE client
+ oledlg/ - OLE 2.0 user interface support
+ olesvr/ - 16 bit OLE server
ntdll/ - NT implementation of kernel calls
psapi/ - process status API
rasapi32/ - remote access server API
shell32/ - COM object implementing shell views
+ sound/ - Sound on loudspeaker (not sound card)
tapi32/ - telephone API
ver/ - File Installation Library (16 bit)
version/ - File Installation Library (32 bit)
- winaspi/ -
+ win32s
+ win87em - 80387 math-emulation
+ winaspi/ - 16 bit Advanced SCSI Peripheral Interface
+ windebug/ - Windows debugger
+ wing/ - WinG (for games) internface
+ winmm/ - multimedia (16 & 32 bit)
+ mciXXX/ - various MCI drivers
+ wineoss/- MM driver for OSS systems
+ wavemap/- audio mapper
+ midimap/- midi mapper
winspool/ - Printing & Print Spooler
- wnaspi32/ -
+ wnaspi32/ - 32 bit ASPI
Miscellaneous:
misc/ - shell, registry, winsock, etc.
- multimedia/ - multimedia driver
ipc/ - SysV IPC based interprocess communication
win32/ - misc Win32 functions
ole/ - OLE code
@@ -164,6 +186,72 @@
4. Implement and test the rest of the function.
+IMPLEMENTING A NEW DLL
+======================
+
+Apart from writing the set of needed .c files, you also need to do the
+following:
+
+1. Create a directory <MyDll> where to store the implementation of
+ the DLL.
+
+ If the DLL exists under Windows as both 16 and 32 bit DLL, you can
+ either create one directory for each, or have a single directory
+ with both implementations.
+
+ This (those) directory(ies) have to be put under the dlls/
+ directory in Wine tree structure.
+
+2. Create the Makefile.in in the ./dlls/<MyDll>/ directory. You can
+ copy an existing Makefile.in from another ./dlls/ subdirectory.
+
+ You need at least to change the MODULE, SPEC_SRCS, and C_SRCS
+ macros.
+
+3. Add the directory (and the generated .o file for the module) in:
+ + ./configure.in (in AC_OUTPUT macro at the end of the file to
+ trigger the Makefile generation),
+ + ./Makefile.in (in LIBSUBDIRS and LIBOBJS macros)
+
+4. You can now regenerate ./configure file (with 'make configure')
+ and the various Makefiles (with 'configure; make depend') (run
+ from the top of Wine's tree).
+
+ You shall now have a Makefile file in ./dlls/<MyDll>/
+
+5. You now need to declare the DLL in the module lists. This is done
+ by adding the corresponding descriptor in ./if1632/builtin.c if
+ your DLL is 16 bit (resp. ./relay32/builtin.c for a 32 bit DLL)
+ (or both if your directory contains the dual 16/32
+ implementations).
+
+ Note: the name of the descriptor is based on the module name, not
+ on the file name (they are the same in most of the case, but for
+ some DLLs it's not the case).
+
+6. You also need to define the loadorder for the created DLL
+ (./wine.ini and ./module/loadorder.c). Usually, "native,builtin"
+ is ok. If you have written a paired 16/32 bit implementation, don't
+ forget to define it also in those files.
+
+7. Create the .spec file for the DLL export points in your
+ directory. Refer to 'Implementation of new API calls' earlier in
+ this document for more information on this part.
+
+8. Don't forget the .cvsignore file.
+
+9. You can now start adding .c files.
+
+10. For the .h files, if they are standard Windows one, put them in
+ include/. If they are linked to *your* implementation of the DLL,
+ put them in your newly created directory.
+
+If you need to create a new debug channel, just add the
+DECLARE_DEBUG_CHANNEL to your .c file(s) and rerun
+tools/make_debug. When sending out your patch, you don't need to
+provide nor ./configure nor the ./include/debugdefs.h diffs. Just
+indicate that those files need to be regenerated.
+
MEMORY AND SEGMENTS
===================
@@ -223,7 +311,7 @@
#include's which will take care of the packing for you:
#include "pshpack1.h"
-struct {BYTE x; WORD y; };
+struct { BYTE x; WORD y; };
#include "poppack1.h"
For alignment on a 2-byte boundary, there is a "pshpack2.h", etc.
=========================================================================
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic