20. marts 2003 - 18:08Der er
9 kommentarer og 1 løsning
"Eksterne" moduler
Jeg har et system, hvor man kan vælge mellem en masse moduler, fx:
Et program "Spillehal", hvor der er et program med en kortspils-klasse (dvs. bland, giv etc.).
Hvert kortspil ligger som et individuelt modul (fx modPoker, modWhist, modBridge) etc.
Kan man, på en eller anden måde, ligge funktionaliteter eksternt i programmet.
Det jeg tænker på er, at lad os nu sige jeg har compileret og har spillehal.exe.
Kan man så lave sit program sådan, at man senere kan tilføje en fil, Fisk.fff, således at man i spillet nu kan vælge fisk.
Kan man fx, når exe-filen start, søge efter alle fff-filer, og udfra dette opbygge en menu med forskellige spil. Og derfra "loade" fff-filen ind i koden ???
Håber i forstår - ellers spørg endelig
Btw - en løsning med flere seperate exe-filer kan ikke anvendes.
Mvh Martin
PS. Jeg tror desværre godt, jeg kender svaret på mit spørgsmål ;-)
Du kan jo ikke som sådan loade ny kode eller ny funktionalitet ind i et eksisterende program.
Du kan derimod loade alle de variable/værdier/objekter du har lyst til. Der skal i selve applikationen være kodet for muligheden for at hente nye informationer. Og med dll'er som larildsen nævner, kan du loade funktioner.
Du kunne f.eks. have en filliste i enten en inifil, eller i SysReg databasen. (det med at søge kunne du selvfølgelig også). Når applikationen loader aflæser den registeret, og kan her læse at den skal åbne fil "ditogdat", som så kan indeholde de nye oplysninger/billeder/objekter whatever.
Du kan her gemme oplysninger om alt muligt: tekst til labels,baggrundsfarver,om kontroller er synlige/usynlige osv
Du kunne gøre det sådan, men det stiller store krav til selve applikationen, da der her skal kodes for alle eventualiteter. ;-)
Det skal lige siges, at det ikke er et kortspils-program. Det var bare et (godt, syntes jeg selv) eksempel.
Det er ikke et spørgsmål om tildeling af captions mv. - det er reel funktionalitet, som skal ligge i programmet.
larildsen >> Man kan vel netop ikke loade dll'er dynamisk - der skal oprettes en reference inden koden compiles og dll'en skal registreres i registrerings-databasen ved install af programmet.
Det jeg selvfølgelig kan gøre er, at lave alle kortspil i een dll (kortspil.dll), og hvis der så skal tilføjes et nyt kortspil kan man vel bare overskrive dll'en (eller, skal den registreret i sysreg igen ?) - vil dette evt. kunne virke ?
Ja, det vil virke. Det er vel netop hvad man gør med dll'er. mht sysreg, så tror jeg egentlig det er ligegyldigt, hvis filen hedder det samme, og ligger det samme sted. Men det er vel udmærket at have den nye dll registreret? Når man alligevel skal distribuere dll'en, så kan man ligesågodt gøre det i en setupfil, der både installerer dll-filen og registrerer den.
Hmmmm brobaek, DLL = Dynamic Load Lib. DLL'er kan netop loades fuldstændigt dynamisk, og kræver ingen reference inden koden compileres, men hvis du ikke har fuldt stinavn dertil, skal de registreres. Det kan godt ske at kodningen af det er lidt tricky, men det kan lade sig gøre. Jeg har ikke nogen kode eksempler i VB, men har selv tidligere loaded DLL'er som jeg ikke kendte til på compilerings tidspunktet i programmer skrevet i C og Java. Interfacet til sådanne eksterne funktioner er meget tricky, idet alle funktioner jo skal kaldes med det rette antal parametre af den korrekte type. Du kunne som du selv skriver lave en enkelt .DLL som du version opdaterer, men det kræver en indsigt at skrive en rubust .DLL, idet den skal tage højde for alle mulige situationer der kan opstå, idet ethvert program i princippet kan kalde den.
Det kan godt lade sig goere at loade ActiveX DLL'er dynamisk... Men saa skal man snyde. Eftersom du bruger VB, vil jeg anbefale dig at bruge VB metoderne til at loade dll'erne. Det kan ikke lade sig goere at loade dynamiske DLL'er, da VB skal kende sine interfaces, functions osv. paa kompileringstidspunktet. Det kan kun lade sig goere i C++, via LoadLibrary() og et par typecasts derefter...
Anyway, mit raad til dig: Medmindre det her er noget som du virkeligt gerne vil have, saa syntes jeg du skal lade vaere. Det er meget besvaerligt, giver mange begraensninger osv...
Jeg kan forstå på svarerne, at der ikke findes nogen korrekt, afprøvet måde at gøre dette på. Jeg laver derfor bare een stor exe, og opdaterer denne løbende.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.