DOCERR: Guide to Programming LIBENTRY.ASMLast reviewed: July 22, 1997Article ID: Q69894 |
3.00 3.10
WINDOWS
kbprg kbdocerr
The information in this article applies to:
SYMPTOMSPages 20-22 and 20-23 of the "Microsoft Windows Software Development Kit Guide to Programming" for versions 3.0 and 3.1 include incorrect code for the Windows dynamic-link library (DLL) entry routine, LIBENTRY.ASM.
RESOLUTIONThe following is the correct code:
PAGE,132 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; LIBENTRY.ASM ; ; Windows dynamic-link library entry routine ; ; This module generates a code segment called INIT_TEXT. ; It initializes the local heap if one exists and then calls ; the C routine LibMain which should have the form: ; BOOL FAR PASCAL LibMain(HANDLE hInstance, ; WORD wDataSeg, ; WORD cbHeap, ; LPSTR lpszCmdLine); ; ; The result of the call to LibMain is returned to Windows. ; The C routine should return TRUE if it completes initialization ; successfully, FALSE if some error occurs. ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; include cmacros.inc externFP <LibMain> ; the C routine to be called createSeg INIT_TEXT, INIT_TEXT, BYTE, PUBLIC, CODE sBegin INIT_TEXT assumes CS,INIT_TEXT ?PLM=0 ; 'C'naming externA <_acrtused> ; ensures that Win DLL startup code ; is linked ?PLM=1 ; 'PASCAL' naming externFP <LocalInit> ; Windows heap init routine cProc LibEntry, <PUBLIC,FAR> ; entry point into DLL cBegin push di ; handle of the module instance push ds ; library data segment push cx ; heap size push es ; command line segment push si ; command line offset ; if we have some heap then initialize it jcxz callc ; jump if no heap specified ; call the Windows function LocalInit to set up the heap ; LocalInit((LPSTR)start, WORD cbHeap); xor ax,ax cCall LocalInit <ds, ax, cx> or ax,ax ; did it do it ok ? jz error ; quit if it failed ; invoke the C routine to do any special initialization callc: call LibMain ; invoke the 'C' routine ; (result in AX) jmp short exit ; LibMain is responsible for ; stack clean up error: pop si ; clean up stack on a LocalInit error pop es pop cx pop ds pop di exit: cEnd sEnd INIT_TEXT end LibEntry |
Additional reference words: 3.00 3.10 docerr
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |