/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
WithEvents
Fra : Anton Vestergaard


Dato : 25-01-02 01:21

Hej
Jeg har lavet en DLL med Events. Disse events affyres med forskellige
tidsintervaller
på baggrund af en timer i DLL'en.
De klienter som bruger DLL'en skal så se disse events og agere udfra dem.
Indtil videre kan jeg kun få det til at virke hvis jeg lader en klient kalde
proceduren
der affyrer eventet (og det er så kun den kaldende klient der kan se
eventet).

Nogen der har en god ide?

mvh og tak
Anton



 
 
Carsten Suurland (25-01-2002)
Kommentar
Fra : Carsten Suurland


Dato : 25-01-02 06:06

Hej Anton

Du skal bare gøre sådan her:

Private WithEvents MyObject as MyDLL.MyClass

Events implementerer du på normal vis;

Private Sub MyObject_MyEvent(Arg1 As String)
...
End Sub

/Carsten Suurland



Anton Vestergaard (25-01-2002)
Kommentar
Fra : Anton Vestergaard


Dato : 25-01-02 08:44

Tak for svaret.
Det hjælper bare ikke.
Lad mig uddybe opgaven lidt mere.

Jeg har en klasse med følgende:

Public Event Updated

Public Sub Update
RaiseEvent Updated
End Sub

Update proceduren køres fra et modul i klassen hvert sekund.
-------------------------------

Jeg har et andet project med følgende i Formen:

Private WithEvents m_objMyClass As MyDll.MyClass

Private Sub Form_Load()
Set m_objMyClass = New MyDll.MyClass
End Sub

Private Sub m_objMyClass_Updated()
MsgBox "Event from MyFirstDll!"
End Sub
------------------------------
Og her opstår miséren så. Updated Eventet bliver affyret som det skal (kan
jeg se via en log).
Men min Form ser bare aldrig det event!?!
Jeg tror det har noget at gøre med måden hvorpå min Dll er instancieret!

Jeg håber det klargører det lidt.

mvh
Anton



"Carsten Suurland" <carsten@suurland.dk> skrev i en meddelelse
news:KJ548.5436$XA5.621527@news000.worldonline.dk...
> Hej Anton
>
> Du skal bare gøre sådan her:
>
> Private WithEvents MyObject as MyDLL.MyClass
>
> Events implementerer du på normal vis;
>
> Private Sub MyObject_MyEvent(Arg1 As String)
> ...
> End Sub
>
> /Carsten Suurland
>
>



Tomas Christiansen (25-01-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 25-01-02 13:50

Anton Vestergaard skrev:
> Jeg har en klasse med følgende:
>
> Public Event Updated
>
> Public Sub Update
> RaiseEvent Updated
> End Sub

Og denne kode ligger i klassen MyDll.MyClass og ikke en anden klasse?

-------
Tomas



Carsten Suurland (25-01-2002)
Kommentar
Fra : Carsten Suurland


Dato : 25-01-02 14:09

Hej Anton

Jeg kan ikke se, at der skulle være noget i vejen med din kode...
Du instancierer dit objekt korrekt og dit event i din DLL er public som det
jo gerne skulle være...

Et alternativ til den fremgangsmåde du har anvendt indtil videre, er at du
ikke anvender events, men overfører en klasse til din DLL (delegate
funktionalitet). Et klasse som har en rutine du kalder når der skal
opdateres.

F.eks.:

I dit program

Class MyCommunicator
Public Sub Update
...
End Sub
End Class

''''''''''''
Private m_MyComm as CommunicatorClass

Sub Form_Load
Set m_MyComm = New CommunicatorClass
Set m_MyDLL = New MyDLL.Class
Set m_MyDLL.Communicator = m_MyComm
End Sub

I din DLL
Public Sub Set Communicator(X as Object)
'I stedet for et object kan det alternativt være et COM-interface som din
klasse implementerer
Set m_Comm = X
End Sub

Public Sub Update
m_Comm.Update
End Sub

Som sagt så er det et alternativ... Det kan minde lidt om
callback-funktionalitet.
Men jeg kan altså ikke forstå hvorfor din nuværende kode ikke virker. Det
burde den (med udgangspunkt i det du har skitseret)

/Carsten Suurland



Anton Vestergaard (27-01-2002)
Kommentar
Fra : Anton Vestergaard


Dato : 27-01-02 02:31

Tak igen.
Jeg har fundet problemet i min kode. Jeg oprettede en instans
af klassen i Dll'en, hvorefter det var den jeg opdaterede, og
dermed ikke klienternes instans. Stupido ).

Delegate giver en anelse mere overhead, så vidt jeg kan se, men
det er da bestemt et alternativ som jeg vil lægge ind i baghovedet
til andre opgaver.

Til daglig er jeg ikke programmør, hvorfor mit spørgsmål måske
har været en anelse trivielt.
Min opgave er at flytte data fra et system til et andet via et
kommunikations interface på hver side.
Begge interfaces er ret ressource krævende, hvorfor jeg ville gøre
det via en seperat tråd (Dll). Den del er også lykkedes, og ressource
forbruget er minimeret. Endvidere skal programmet være eksponeret via
automation således at programmet kan få ændret på parametre fra
eksternt hold. Det er ikke helt lykkedes med Dll'en alene, men via en
ActiveX Exe der indpakker Dll'en er det også lykkedes.
Ideen med at gøre det på den måde er at Dll'en kan omskrives uden
at hele brugerinterfacet skal omskrives. Eventuelt hvis Dll'en indeholder
funktioner der kan optimeres (strengbehandlinger) i andre sprog (Asm/C).

Jeg siger tak for jeres tid.
mvh
Anton


"Carsten Suurland" <carsten@suurland.dk> skrev i en meddelelse
news:nOc48.1$m6.1056@news000.worldonline.dk...
> Hej Anton
>
> Jeg kan ikke se, at der skulle være noget i vejen med din kode...
//SNIP



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste