KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q29840: C 5.10 MTDYNA.DOC: Creating a Single Thread DLL

Article: Q29840
Product(s): See article
Version(s): 5.10   | 5.10
Operating System(s): MS-DOS | OS/2
Keyword(s): ENDUSER | | mspl13_c
Last Modified: 15-JAN-1991

The following information is from "Section 5: Creating Dynamic-Link
Libraries" of the Microsoft C version 5.10 MTDYNA.DOC file.

5.1.2   Creating a Single-Thread Dynamic-Link Library

The process of creating a single-thread dynamic-link library is
outlined below:

1. Create a definition file (.DEF extension) for the main program
   (STMAIN.DEF). This definition file specifies which functions it
   will import from the dynamic-link library. In this simple example,
   the file STMAIN.DEF contains the following:

      NAME STMAIN
      IMPORTS STDLL._DynalibTest

2. Create a definition file for the dynamic-link library (STDLL.DEF)
   that specifies which functions it will export. In this simple
   example, the file STDLL.DEF contains the following:

      LIBRARY STDLL
      DESCRIPTION 'Sample Dynamic-Link Library written in Microsoft C'
      PROTMODE
      EXPORTS _DynalibTest
      DATA MULTIPLE

3. Compile the main program. The program may be compiled using any
   memory model and any math package. Since the sample single-thread
   dynamic-link library (STDLL.C) uses far data, the sample main
   program (STMAIN.C) can be compiled as either compact or large
   memory model. For a compact memory model, the C compiler is invoked
   with something like this:

      cl /AC /G2 /c stmain.c

4. Link the main program to produce STMAIN.EXE. The following files
   are linked together:

      STMAIN.OBJ     Output from step 3
      DOSCALLS.LIB   OS/2 support library
      CLIBCEP.LIB    Any regular C run-time library (in this
                     case, compact memory model, emulator math
                     package)
      STMAIN.DEF     Main definition-module (single thread)
      STMAIN.EXE     Output from LINK (single thread)

   The linker is invoked with something like this:

      link stmain.obj/noi,,, clibcep.lib doscalls.lib/nod,stmain.def;

5. Compile the dynamic-link library module. The module should be
   compiled with the /ALfw option which specifies large-code pointer
   size, far-data pointer size and a segment setup of SS not equal to
   DS; DS fixed. Stack checking should also be turned off. The C
   compiler is invoked with something like this:

      cl /Alfw /G2 /Gs /c stdll.c

6. Link the dynamic-link library module to produce STDLL.DLL. The
   following files are linked together:

      STDLL.OBJ      Output from step 5
      DOSCALLS.LIB   OS/2 support library
      LLIBCDLL.LIB   Single-thread dynamic-link library C
                     run-time support library
      STDLL.DEF      Dynamic-link library definition-module
      STDLL.DLL      Output from LINK

   The linker is invoked with something like this:

      link stdll.obj,stdll.dll/noi,,llibcdll.lib doscalls.lib/nod,stdll.def;

7. Place the STDLL.DLL file (from step 6) in a directory on your
   LIBPATH so OS/2 is able to find it. Then run the program
   STMAIN.EXE. If the dynamic-link-library file is not in your
   LIBPATH, OS/2 is not be able to run STMAIN.EXE.

Note: The LIBPATH is set in your CONFIG.SYS or CONFIG.OS2 file,
depending on which version of OS/2 you are using. LIBPATH is not part
of your environment strings like the LIB, INCLUDE and PATH variables.

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.