Avatar billede brobaek Nybegynder
20. marts 2003 - 18:08 Der 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 ;-)
Avatar billede brobaek Nybegynder
20. marts 2003 - 18:10 #1
Og for svaret "Nej, det kan du ikke" gives altså ikke fuldt point ;-p
Avatar billede larildsen Nybegynder
20. marts 2003 - 18:16 #2
Du kan jo altid loade .DLL filer dynamisk
Avatar billede tjacob Juniormester
21. marts 2003 - 11:33 #3
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.  ;-)
Avatar billede brobaek Nybegynder
21. marts 2003 - 11:43 #4
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 ?

Mvh
Martin
Avatar billede brobaek Nybegynder
21. marts 2003 - 11:44 #5
*ret*
"det er reel funktionalitet, som skal ligge i programmet."
*til*
"det er reel funktionalitet, som skal ligge i den 'eksterne' kode"
Avatar billede tjacob Juniormester
21. marts 2003 - 11:51 #6
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.
Avatar billede larildsen Nybegynder
21. marts 2003 - 11:56 #7
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.
Avatar billede chris2k Nybegynder
22. marts 2003 - 04:22 #8
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...
Avatar billede brobaek Nybegynder
27. august 2003 - 12:40 #9
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.
Avatar billede brobaek Nybegynder
27. august 2003 - 12:40 #10
lukker sp.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester