Avatar billede thlund Nybegynder
05. januar 2005 - 09:30 Der er 6 kommentarer og
2 løsninger

VB.NET og DLL'er

Hej

Jeg ønsker at lave et program, der er temmelig åben mht udviddelser. Jeg har lavet nogle forsøg i andre programmerings sprog, men jeg har besluttet mig for VB.NET.

Hvis jeg nu, for eksemplets skyld, vil lave et program der viser nogle biler på skærmen og jeg ønsker at vise gule,grønne og blå biler, så kan jeg selvfølgelig hard-code det ind i programmet, men idet jeg ønsker at kunne udvidde vilkårligt til f.eks. røde og hvide biler så vil jeg helst have at jeg ikke skal ind og lave noget i hovedprogrammet.

Det som jeg har tænkt er at lave en dll for hver farve og så lave programmet så fleksibelt at den kan opdage en ny dll og umiddelbart benytte den. Dll'en håndterer alt mht den enkelte farve bil og dermed har den et generaliseret interface.

I C++ kan jeg bruge loadlibrary, freelibrary etc, men så vidt jeg kan se skal jeg i VB definere en
dll og dens interface i en declare statement. Dette kan jeg naturligvis få til at fungere, men da jeg har flere - i princippet uendelig mange - dll'er søger jeg en funktionalitet der kan loade dll'er runtime og ikke definere ved compile/link.

Kan jeg det overhovedet ?

MVH
Thomas
Avatar billede yellow Nybegynder
05. januar 2005 - 10:17 #1
tja, du kan vel stadig bruge loadlibrary ved at kalde det gennem win32 API:
http://www.dotnetinterop.com/faq/?q=LoadLibrary

Eller du kan prøve noget reflection i .net:
http://www.msjogren.net/dotnet/eng/samples/dotnet_dynpinvoke.asp

Så er der vist noget med at den kommende .NET 2.0 platform (Whidbey) introducerer en ny metode: Marshal.GetDelegateForFunctionPointer
Avatar billede arne_v Ekspert
05. januar 2005 - 11:18 #2
Det er indbygget i .NET at loade .NET assemblies dynamisk.

Dim o As Object = Assembly.Load("DinAssembly").CreateInstance("DinKlasse")

eller

Dim o As CommonInterface = CType(Assembly.Load("DinAssembly").CreateInstance("DinKlasse"), CommonInterface)
Avatar billede thlund Nybegynder
07. januar 2005 - 11:04 #3
Jeg tror lige at jeg skal lege lidt med det her før jeg kan se hvilken metode jeg skal bruge.

Kan i ikke lige svare, så kan i dele pointene.

Thomas
Avatar billede yellow Nybegynder
07. januar 2005 - 11:08 #4
Hvis det kun er .Net assemblies du skal loade, er arne_v løsningen pænest.
Avatar billede thlund Nybegynder
07. januar 2005 - 11:17 #5
Ja, den så fin ud, men det er ikke kun assemblies jeg skal loade.
Hele ideen er at skabe et program som brugeren kan udvidde som han vil - heraf er dll'er kun en af flere muligheder. Derfor er jeg ikke vild med at binde mig til kun assemblies. Almindelige dll'er kan jo laves af flere sprog etc.

Ellers tak.
Thomas
Avatar billede arne_v Ekspert
07. januar 2005 - 11:52 #6
Du kan ikke loade .NET assemblies og Win32 DLL'er på samme måde.

Så du vil under alle omstændigheder skulle have forskellig kode til de to.
Avatar billede arne_v Ekspert
07. januar 2005 - 11:52 #7
og et svar
Avatar billede thlund Nybegynder
07. januar 2005 - 12:14 #8
Tak Arne.

Jeg ved godt at jeg skal bruge forskellige metoder, men planlægger at benytte så mange tilgangs metoder som muligt.

Thomas
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
Kategori
Kurser inden for grundlæggende programmering

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