Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Kan man importera variabler från en dll till VB6?

Postades av 2006-11-14 23:20:03 - Joakim Lindén, i forum visual basic - allmänt, Tråden har 8 Kommentarer och lästs av 812 personer

Man kan ju som bekant importera funktioner från en DLL och använda dessa som om de vore skrivna i ens egen kod. Vidare kan man man till en DLL exportera både funktioner och variabler (och klasser) från åtminstone C++ men även andra språk. Men hur gör man för att importera _variabler_ till ett VB-projekt?

En funktion importeras ju typ såhär:

private declare function func1 Lib "minDLL.dll" Alias "vad_func1_hette_där_den_exporterades_ifrån" (argument) as datatyp

Vad blir alltså mostvarande rad om jag vill importera en variabel istället, eller går det inte?

Tacksam för svar! /Jocke


Svara

Sv: Kan man importera variabler från en dll till VB6?

Postades av 2006-11-15 10:23:03 - Andreas Hillqvist

Jag känner inte till någon sätt att göra detta.
Kan du berätta varför du vill dela minne mellan dll'n och vb?


Svara

Sv:Kan man importera variabler från en dll till VB6?

Postades av 2006-11-15 14:00:42 - Joakim Lindén

I DLL:en som jag skapat i C finns en funktion och en variabel exporterade.
Variabeln är en "intern statusvariabel" som talar om hur långt exekveringen av funktionen hunnit. Tänkte använda detta till att fylla i en progress bar i VB där jag alltså har hela GUI:t.

Naturligtvis kan denna information hämtas med ett funktionsanrop men eftersom man kan exportera variabler (i alla fall från C/C++) till en DLL och dessutom importera dessa till C/C++ så tyckte jag att det borde gå att göra även i VB. Om sedan denna variabel kunde kopplas (på ngt sätt som jag inte funderat något djupare på) direkt till en textlabel (eller till progressbar:ens value-egenskap) så skulle man på så sätt få statusen uppdaterad utan att behöva fråga hela tiden med nån timerfunktion.


Svara

Sv: Kan man importera variabler från en dll till VB6?

Postades av 2006-11-15 18:06:41 - Andreas Hillqvist

Det låter som om en CallBack funktion vore mer lämplig. Att du skickar en funktionspekar in till din funktion vilket sköter uppdatering av progressbaren.
Du har möjlighet att skicka funktionspekar till funktioner med hjälp av AddessOf operatorn i vb.


Svara

Sv: Kan man importera variabler från en dll till VB6?

Postades av 2006-11-16 18:32:14 - Sebastian Andersson

Jag håller med Andreas, en callbackfunktion är nog det smidigaste och smartaste i det här fallet (om jag har fattat dig rätt).

Här är ett exempel på hur callbacks implementeras i C men behandlas av VB:

C:

/* Callback definition. */
typedef void (CALLBACK *PROGRESSPROC)(float); /* float/int */

void WINAPI StartaJobbet(/* dina parametrar här */, PROGRESSPROC pCallback)
{
float progress=0.f;

/* Gör någonting... */

/* Uppdatera variabeln. */
progress+=10.f;

/* Kalla callbackproceduren i VB... */
pCallback(progress);
}

VB:

Private Declare Sub StartaJobbet Lib "MinDLL.dll" (..., ByVal pCallback As Long)

Public Sub MinCallback(ByVal progress As Single)
ProgressBar1.Value = progress
End Function

Private Sub Command1_Click()
StartaJobbet ..., AddressOf MinCallback
End Sub

Glöm dock inte att placera MinCallback i en modul. Det finns andra sätt att implementera callbacks på, men jag tycker detta sättet är simpelt och bekvämt, passar samt för mig i de flesta fallen. Notera även att koden ovan är otestad.

Lycka till!;)


Svara

Sv:Kan man importera variabler från en dll till VB6?

Postades av 2006-11-17 11:55:41 - Joakim Lindén

Jag håller med om att ett funktionsanrop är snyggare och säkrare än att dela minne via en exporterad variabel. Jag har dock en fråga, kanske en dum sådan:

Detta med Callback, hur funkar det? Det verkar på din kod ovan som att jag i min dll kan köra funktionen som uppdaterar data i VB? Alltså istället för att behöva ha en timer i vb som periodiskt frågar dll:en (via en exporterad funktion) om status så kan jag alltså från den kod som körs i dll:en välja att uppdatera statusen när jag vill, är det rätt uppfattat?


Svara

Sv: Kan man importera variabler från en dll till VB6?

Postades av 2006-11-17 12:19:34 - Jan Bulér

@Joakim
Ja, det är rätt uppfattat. Fördelen är bl a att du inte behöver fråga efter förändringar då det med callback blir din dll som talar om för dig när det skett en förändring.


Svara

Sv: Kan man importera variabler från en dll till VB6?

Postades av 2006-11-17 12:30:08 - Andreas Hillqvist

VB sidan:
Till din DLL funktion skickar du en funktionspekar med AddressOf operatorn till den VB funktion som uppdaterar din status.

DLL sidan:
Funktionen har en funktionspekare som en av sina parametrar. När den vil uppdatera status så anropar du denna funktionspekar.

VB Sidan:
Funktionen som skickades som parameter kommer att anropas. Du kan skicka med parametrar till funktionen. T. Ex. Tal om vilken post av hur många du är på. VB funktionen i ditt program känner till hur statusen skall uppdareas. D.v.s. Ökar på din progressbar.
VB funktionen retunerar

DLL sidan:
Fortsätter, upprepar anrop till callback funktionen.
Och avslutar till slut.

VB Sidan:
DLL funktionen du anropade returnerar nu och fortsätter på nästa sats efter funktionsanropet till DLL'n .


Svara

Sv: Kan man importera variabler från en dll till VB6?

Postades av 2006-11-17 13:33:03 - Sebastian Andersson

Joakim:

Callbacks är ett väldigt smidigt sätt att notifiera om hur processen (jobbet) fortlöper. Du kan givetvis inkludera något annat i callbackproceduren så som ett ID som talar om för moderprogrammet vad som just nu sker (läser filer, parse:ar filen, sparar filen osv). Exempel (byggande på föregående kod):

C:

/* Callback definition. */
typedef void (CALLBACK *PROGRESSPROC)(int,float);

void WINAPI StartaJobbet(/* dina parametrar här */, PROGRESSPROC pCallback)
{
float progress=0.f;

/* Gör någonting... */

/* Uppdatera variabeln. */
progress+=10.f;

/* Kalla callbackproceduren i VB... */

/* Nu läser vi data... */
pCallback(0,progress);

/* Nu analyserar vi data... */
pCallback(1,progress); */

/* Nu sparar vi data... */
pCallback(2,progress);
}

VB:

Private Declare Sub StartaJobbet Lib "MinDLL.dll" (..., ByVal pCallback As Long)

Public Sub MinCallback(ByVal id As Long, ByVal progress As Single)
Select Case id
Case 0
Label1.Caption = "Läser data..."
Case 1
Label1.Caption = "Analyserar data..."
Case 2
Label1.Caption = "Sparar data..."
End Select

' Uppdatera även progressbaren.
ProgressBar1.Value = progress
End Function

Private Sub Command1_Click()
StartaJobbet ..., AddressOf MinCallback
End Sub

Min poäng är att callbacks är extremt användbara. De är ett utmärkt sätt att exempelvis uppdatera GUI:n med bl a progressvärdet och statusen, precis som i en vanlig "Event" (händelse) i VB. Hoppas du "get the picture".:)


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 725
27 958
271 751
732
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies