Gebruik van DLL bestandenHierover is veel onduidelijkheid als ik de vragen die aan mij worden gesteld als voorbeeld neem. Toch is het even weten hoe het moet. Stel: u heeft een gecompileerd DLL bestand (bijvoorbeeld van iemand gekregen of gekocht) met een aantal leuke routines er in. Nu zijn er een paar gevallen mogelijk:
U ziet hier een voorbeeld voor het met PB/DLL meegeleverde voorbeeld Capfirst.bas (staat in de Samples directorie onder VB32). Dit bestand zelf bevat de volgende programma code:
Het bestand wordt door de compiler directive $compile DLL tot een DLL omgezet. PB/CC heeft deze mogelijkheid zelf niet om DLL bestanden te maken, dus daarom is de gecompileerde uitvoering hier te vinden. We zullen deze DLL gebruiken als voorbeeld bestand om te leren DLLs aan te roepen. De DLL bevat dus maar één functie en wel met de naam CAPFIRST. Doel van deze functie is om elke eerste letter van een woord te veranderen in een hoofdletter. Cruciaal is trouwens het woord EXPORT, aangezien zonder dit woord de functie alleen binnen de DLL is te gebruiken. Dus zonder het woord kunt u het wel door andere routines in dezelfde DLL gebruiken, maar niet door andere gebruikers buiten de DLL. Denk bijvoorbeeld aan een wachtwoord routine: u moet die binnen de DLL gebruiken, maar wilt niet dat andere gebruikers de routine aanroepen om het wachtwoord proberen te achterhalen. De functie die als enige in de export lijst staat, zult u binnen uw eigen programma moeten bekend stellen. Daarvoor moet u vier dingen aangeven:
U ziet het: veel zaken moet u ook al doen als uw code bovenin uw programma een functie of subroutine gebruitk die pas later in de code voorkomt. U gebruikt dan het DECLARE statement om de compiler de noodzakelijke gegevens te verschaffen. Het declare statement voor het gebruik van een DLL is vergelijkbaar:
U geeft dus eerst de naam van de functie op, gevolgd door de plaats waar de functie is
te vinden, en wel de betreffende DLL, waarbij u ook de extensie moet opgeven (.DLL dus).
Zorg er bovendien voor dat ook bij uitvoering het DLL bestand is te vinden, want u
gebruikt immers een apart bestand! Na het definiëren van de functie gaan we er gebruik van maken ook. Ons programma ziet er als volgt uit:
We roepen de functie dus aan, net alsof de routine gewoon in de source aanwezig is. Ook dit programmaatje is in gecompileerde vorm aanwezig en wel hier te vinden. Het is gecompileerd met PB/CC 2.0, dus opent een Windows console om de resultaten te laten zien. U ziet dan dat steeds de eerste letter van elk woord een hoofdletter is geworden. Zorg er wel voor dat de .EXE de .DLL steeds kan vinden. Vroeger zette men dan de .DLL bestanden in de Windows directorie, zodat dezelfde programma's dezelfde DLL bestanden konden gebruiken. Tegenwoordig is het beleid: zet alle DLL bij je eigen toepassing, zodat er geen versie conflicten kunnen optreden. Dus bijvoorbeeld beide bestanden in dezelfde directorie plaatsen. Tenslotte nog een verwijzing naar een ZIP bestand, waarin de twee BAS files zitten, het EXE bestand en de DLL. |
|