|
|
1.1 root 1:
2: This directory contains illustrations of the creation and use of dynamic link
3: libraries. The library itself is constructed in one of two different ways:
4:
5: 1. entirely in assembly code
6: 2. nearly all in C, with an assembly stub module
7:
8: The initialization entry point to the dynalink library must be defined in
9: an assembly module, which can contain all of its own code or can make
10: a call to a routine in a C module.
11:
12: Your library can have several data segments, each which is global (SHARED)
13: to all applications using the library or is duplicated (NONSHARED) for each
14: application. An example would be a pseudo graphics driver. The
15: "per-instance" data could be structures representing windows owned by each
16: application. The global data could be semaphores used to serialize access to
17: the hardware.
18:
19: -------------------------------------------------------------------------------
20: The application:
21:
22: There are two methods of linking to a dynamic link library:
23:
24: 1. at load time
25: 2. at run time
26:
27: The first method is less complicated in that the system takes care of
28: all fixup and loading of the library. The second method is more
29: comprehensive in that it allows the application to determine if a library
30: exists, and make a choice of whether or not to use it.
31:
32: The latter would be preferred in applications that need to run in environments
33: lacking in certain libraries. For example, a package could make good use of
34: a fancy high resolution graphics board. However, if the product wasn't
35: present the application could fall back to the standard VIO graphics (such as
36: they are).
37:
38: There are two ways of linking an application so that it can link to a dynalink
39: library at load time:
40:
41: 1. the application can have a .DEF file which names the entry points
42: of the dynalink library used by it
43: 2. IMPLIB can be used to create an IMPORTS library from the .DEF file
44: of the dynalink library
45:
46: The second method does away with the need for the application to define
47: a .DEF file.
48:
49: -------------------------------------------------------------------------------
50:
51: readme this file
52:
53: dynlink.cmd front end for "make dynlink"
54:
55: Sets up the environment for constructing the dll either
56: from C modules ("dynlink c") or from the asm module
57: ("dynlink asm"), then invokes "make dynlink".
58:
59: dynlink makefile
60:
61: NB - The LIB and INCLUDE environment variables must be
62: set correctly. LIB is the search path for LINK and
63: INCLUDE is the search path for CL.
64:
65: NB - LIBPATH can be set (in CONFIG.SYS) to start in the
66: current directory. eg. LIBPATH=.;C:\;C:\LIB
67:
68: dynlib.h defines calling conventions for the library routines
69:
70: dynlib.def contains library information for the linker and loader
71:
72: This file is used to create the import library for the dll.
73:
74: dyninit.asm contains initialization routine entry point
75: dynlib.c data segment is per-instance
76: dynlib2.c data segment is global
77:
78: near subdirectory with C modules where data is not declared far
79: far subdirectory containing the far-data versions of the C modules
80:
81: NB - Both near & far assume small-model compilation.
82:
83: dynlib3.asm assembly version
84:
85: dynlink.def IMPORTs the entry points of the dll
86:
87: dynlink1.c links to the dll at load time
88: dynlink2.c links to the dll at run time
89:
90: dyngo.cmd brings up several copies of dyndemo2.exe
91:
92: NB - LIBPATH must contain the root directory.
93:
94: dyncvp.cmd brings up CodeView
95:
96: NB - If you want to single-step the program, you must
97: (with the cvp I am using, MS cvp v.2.00.10) use the
98: right mouse button to execute to the next instruction,
99: immediately upon entering cvp. Then you can use F8
100: to single-step to your heart's content.
101: Also, for the time being, cvp requires that your
102: dll reside in the root directory of your boot disk.
103: This requirement will go away.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.