Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[VB6] DLL maken

Anoniem
shoekie
9 antwoorden
  • Ey,

    Ik heb een functie die ik vaak gebruik in mijn programma's. Ik 'stop' nu elke keer de losse module in mijn project, maar kan ik de functies die ik wil gebruiken ook in een dll zetten? En hoe roep ik deze dan aan?
  • Project maken in ActiveX dll en dan opslaan

    Nieuw project, in het menu project references en dan zoeken naar jouw dll. Een variabele toekennen aan de class in jouw dll en via die variabele de functies aanroepen. Als dit als bizar klinkt hoor ik het wel, dan leg ik het wat langzamer uit :D :D :D
  • Eerste deel begrijp ik wel. Dus gewoon mijn functie(s) in een ActiveX dll stoppen die compilen. Alleen laatste begrijp ik niet. Gebruik al andere bestaande dll en die roep ik gewoon aan met:
    [code:1:0e36905fba]Public Declare Function 'FunctieNaam' Lib "path_to_dlll" (ByVal 'variabele' As 'type')[/code:1:0e36905fba]
    Hoef hier dus niets te doen met references. Wat is het verschil? En kan ik diezelfde code ook gebruiken?

    GRTZ,

    René
  • Denk het wel, ik gebruik altijd de reference methode maar dit lijkt me ook wel te doen. Beste kun je het gewoon proberen, dat is de beste leermeester.
  • tis nog niet helemaal gelukt. Doe het volgende als test:

    msg.dll:
    [code:1:ec50152089]
    Function Message (msg as string, title as string) as integer
    Message = msgbox(msg, vbYesNoCancel, title)
    End Function[/code:1:ec50152089]

    Voeg 'm nu toe met reference.

    Form1:
    [code:1:ec50152089]
    Private Sub Form_Load()
    test = Message("Message","Title")
    debug.print test
    End Sub
    [/code:1:ec50152089]

    Krijg vervolgens de melding dat de functie niet gedefineerd is. Wat doe ik fout?
  • Als je een ActiveX dll maakt moet je een klasse aanmaken. Wanneer je nu de dll als reference gebruikt zul je een variabele aan moeten maken die refereert naar de klasse in jouw dll.

    laten we aannemen dat je de klasse messageclass hebt genoemd.
    [code:1:a3190c42fe]private sub somesub()
    dim iets as messageclass

    test = iets.message(bla, bla)
    end sub[/code:1:a3190c42fe]
    helpt dit?

    Ik heb een klein dll bestand gemaakt en een gewoon bestand dat gebruikt maakt van het dll bestand. Je kunt het vinden op deze site

    Het blijft er niet lang op staan, volgende week haal ik het weer weg.

    ps Wat jij fout deed is om de functie in jouw dll niet Public te maken. Standaard zijn alle functies, subs en variabelen private en dus niet zichtbaar voor de buitenwereld.
  • Misschien ben ik een zeikerd, maar overweeg om dat soort kleine functies gewoon in een (class) module te stoppen.

    Een DLL is op zich wel grappig, maar heeft het een echte meerwaarde? Ik heb een aantal (class) modules die ik regelmatig gebruik en die voeg ik gewoon toe aan mijn project. Als jij een DLL update die in de References van je applicatie staat, dan gebeurt het regelmatig dat je applicatie niet meer wilt starten. Daarnaast kost het veel meer processorkracht / geheugen om een DLL te laden en vervolgens een functie te laden. Als je je programma knap schrijft en forms, recordsets en andere veelgebruikte objecten na gebruik gewoon killt met Set myObject = Nothing dan heb je echt veel meer performance dan met zo'n DLL.

    Bovendien scheelt het een hoop rommel in je SYSTEM(32) directory. Natuurlijk is het leuk om eens te proberen een DLL te maken, maar ik raad je aan om ze zoveel mogelijk te mijden.
  • dit is de complete code voor wat je wilt:

    Start VB6 -> Active X Dll , en voer de code in: bijv:

    sub msgcritical()
    msgbox "TEXT", vbCritical, "TITLE"
    end sub

    sub msginformation()
    msgbox "TEXT", vbInformation, "TITLE"
    end sub

    compile en noem het msg.dll

    start VB6 -> Standard EXE -> Reference -> zoek je dll op.
    ga dan naar de code editor en type bij General:

    static message as new msg
    en dan bij
    sub form_load()
    msg.msgcritical of msg.msginformation
    end sub


    Klaar is kees
  • [quote:eed4a17071="RubeL"]Een DLL is op zich wel grappig, maar heeft het een echte meerwaarde? Ik heb een aantal (class) modules die ik regelmatig gebruik en die voeg ik gewoon toe aan mijn project. Als jij een DLL update die in de References van je applicatie staat, dan gebeurt het regelmatig dat je applicatie niet meer wilt starten.[/quote:eed4a17071]
    blame M$.
    [quote:eed4a17071="RubeL"]
    Daarnaast kost het veel meer processorkracht / geheugen om een DLL te laden en vervolgens een functie te laden. Als je je programma knap schrijft en forms, recordsets en andere veelgebruikte objecten na gebruik gewoon killt met Set myObject = Nothing dan heb je echt veel meer performance dan met zo'n DLL.
    [/quote:eed4a17071]
    Dat valt op zich best mee.
    [quote:eed4a17071="RubeL"]
    Bovendien scheelt het een hoop rommel in je SYSTEM(32) directory. Natuurlijk is het leuk om eens te proberen een DLL te maken, maar ik raad je aan om ze zoveel mogelijk te mijden.[/quote:eed4a17071]
    Je hebt ActiveX DLL's en gewone DLL's.
    ActiveX DLL's dien je in de system32 directory plaatsen, registreren en meer van die onzin. (natuurlijk heeft het ook zijn voordelen).
    Bij [i:eed4a17071]gewone[/i:eed4a17071] DLL's, kun je deze gewoon in dezelfde directory plaatsen als je executable en de functies gebruiken die in de DLL's zitten zonder voorafgaande handelingen. Bij een eventuele update van een functie in de .DLL dan hoef je alleen de .DLL te vervangen. En dit is waarschijnlijk wat de vraagsteller bedoelt.

    Blijft de vraag staan:
    Hoe kun je in Visual Basic standaard DLL's maken?

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.