/**************/ /* strdll.c */ /**************************************************************************** LIBRARY: STRDLL.C PURPOSE: Malli DLL-kirjastosta (Dynamic Linking Library) Editor: Vesa Lappalainen 10.11.1992 USAGE: 1) Lisätään omaan ohjelmaan #include "strlib.h" 2) Kutsut aliohjelmiin: KysyJono(...) 3) Lisätään omaan .DEF -tiedostoon IMPORTS STRDLL.KysyJono tai lisätään projektiin .LIB, johon tarvittavat .DLLät on lisätty 4) Varmistetaan, että ajonaikana STRDLL.DLL on joko oletushakemistossa tai polussa. PS. Tämä tiedosto toimii sellaisenaan minkä tahansa DLL:än "pääohjelmana". ***************************************************************************** Tämän kirjaston kääntämiseksi pitää projektissa olla STRDLL.C STRLIB.C STRDLL.DEF STRLIB.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 STRLIB.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. Jos DLL-halutaan lisätä kirjastoon (.LIB), käytetää vaikkapa ohjelmaa ImpLib. ****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ HINSTANCE DLLG_hInstance; /***************************************************************************/ int CALLBACK _export WEP(int nParam) { #pragma argsused return 1; } /***************************************************************************/ int FAR PASCAL LibMain(HANDLE hInstance, WORD wDataSeg, WORD wHeapSize, LPSTR lpCmdLine) { #pragma argsused DLLG_hInstance = hInstance; if ( wHeapSize > 0 ) UnlockData(0); return 1; }