|
|
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.