Wubbable Skrevet 7. juni 2007 Skrevet 7. juni 2007 (endret) Går det an å gjøre noe lignendes dette?: Public Sub WriteDB(ByVal ConSTR As structure) End Sub Endret 7. juni 2007 av Wubbable
GeirGrusom Skrevet 7. juni 2007 Skrevet 7. juni 2007 ja forskjellen på ByRef og ByVal blir at den blir passet på stack.
Wubbable Skrevet 7. juni 2007 Forfatter Skrevet 7. juni 2007 (endret) Forklar Er ikke sånn uberpro i å kode ^^ Dette jeg vil gjøre liksom: Har en structure i ett eller annet prosjekt... Sub'en som skal få structuren som parameter er inni en DLL jeg lager Problemet er at structuren skal være dynamisk, siden DLLen skal brukes i forskjellige prosjekter... Endret 7. juni 2007 av Wubbable
GeirGrusom Skrevet 7. juni 2007 Skrevet 7. juni 2007 Ok: Det finnes to forskjellige minneområder i et program: stack, og heap forskjellen er at stack er minne som vil forsvinne out of scope, mens heap er minne som må allokeres og frigjøres. Når du deklarerer en variabel av typene byte, char, decimal, double, float, int, long, short og structs, så vil de bli allokert på stack. class derimot, vil alltid bli lagret i heap. Men når du gir parameter til en funksjon, kan de enten være ByVal, eller ByRef. Men nå kommer forvirring: stacken blir ofte brukt til å lagre nettop en stack med variabler Så når man skal kalle en funksjon, blir alle variablene lagret etterhverandre på et gitt område, som kalles stack. Hvis variablen er av typen ByRef, eller en class, vi det bli lagt til en peker til denne variablen. Hvis den er en valuetype type, (int, long, float, struct) og spesifisert med ByVal, vil verdien kopieres til stack. deretter kan funksjonen lese verdiene på stacken som parameter. Kanskje dårlig forklart men det er litt vanskelig å forklare... men hovedpoenget: class KAN IKKE sendes som byval, de vil bli byref uansett struct er en VALUETYPE og vil bli kopiert, med mindre ByRef blir spesifisert. Aprikos, string er en class, og vil alltid bli lagt som en referanse. en ting som mange ikke vet også, er at man ikke kan endre på verdiene i en string (det er ikke helt sant, man kan bruke pekere i C#, og System.Runtime.Interop.Marshal i VB.NET)
Wubbable Skrevet 7. juni 2007 Forfatter Skrevet 7. juni 2007 Du forklarte meg nettopp hvorfor man bruker "New" Men, jeg klarer meg for nå med å bare lagre en verdi Fant noen tutorials på google om hvordan man måtte gjøre om structen til byte, og tilbake igjen, og noe med marshall og det der Virka litt vanskelig though ^^
GeirGrusom Skrevet 7. juni 2007 Skrevet 7. juni 2007 Høh? Pass helst struturer by reference, så sparer du mye bry.
Wubbable Skrevet 8. juni 2007 Forfatter Skrevet 8. juni 2007 (endret) Fant en superenkel løsning: Public Sub WriteDB(ByVal Key as string, ByVal Value as Object) Så fungerer den med alt edit: Som det står i tooltip'en: Klassen over alle klasser Endret 8. juni 2007 av Wubbable
GeirGrusom Skrevet 9. juni 2007 Skrevet 9. juni 2007 Det vil gi det samme resultatet som å sende den ByRef
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå