/**************************************************************************** LIBRARY: STRDLL.C PURPOSE: Malli DLL-kirjastosta (Dynamic Linking Library) Editor: Vesa Lappalainen 10.11.1992 USAGE: 1) Lisätään omaan ohjelmaan #include "strdll.h" 2) Kutsut aliohjelmiin: KysyJono(...) 3) Lisätään omaan .DEF -tiedostoon IMPORTS STRDLL.KysyJono 4) Varmistetaan, että ajonaikana STRDLL.DLL on joko oletushakemistossa tai polussa. ============================= Aliohjelmien tarkempi kuvaus: ============================= ks. STRLIB.C ***************************************************************************** Tämän kirjaston kääntämiseksi pitää projektissa olla STRDLL.C STRLIB.C STRDLL.DEF KYSYJONO.RC ja pitää määritellä vakio __DLL__ (joka määrittyy automaattisesti kun laitetaan kääntymään DLL:änä (ks. alla) Lisäksi tarvitaan STRDLL.H ja KYSYJONO.H ----------------------------------------------------------------------------- DLL-kirjaston erot tavalliseen ohjelmaan: ========================================= DLL-kirjaston tekemiseksi pitää muistaa kääntää se ensinnäkin DLL:ksi (Borland C++: Options-Application-Windows DLL) DLL:än .DEF-tiedostossa ei ole NAME, vaan LIBRARY (STRDLL.DEF): LIBRARY STRDLL ; application's module name DESCRIPTION 'Kysyy merkkijonon' EXETYPE WINDOWS ; required for all Windows applications PROTMODE CODE PRELOAD MOVEABLE DISCARDABLE DATA PRELOAD MOVEABLE SINGLE ; HUOM! SINGLE HEAPSIZE 1024 "Pääohjelmana" on WinLib, ei WinMain "Lopetusohjelmana" on WEP "Globaalien" muuttujien kanssa on oltava tarkkana ja käyttömuuttujista on tehtävä oma versio jokaiselle käynnissä olevalle kutsulle! Muuten DLL tehdään kuin mikä tahansa ohjelma ****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include #include "strdll.h" #include "kysyjono.h" HANDLE GhInstance; /***************************************************************************/ int CALLBACK_E WEP(int nParam) { #pragma argsused return 1; } /***************************************************************************/ int FAR PASCAL LibMain(HANDLE hInstance, WORD wDataSeg, WORD wHeapSize, LPSTR lpCmdLine) { #pragma argsused GhInstance = hInstance; if ( wHeapSize > 0 ) UnlockData(0); return 1; }