Avatar billede pcnovice Nybegynder
21. december 2004 - 11:49 Der er 1 løsning

Problem med wshshell.run og debug

Hej!

Jeg prøver at lave en applikation som skal tilgå noget data gemt i memory af en anden applikation.

Jeg starter en applikation (som jeg ikke har lavet/kan ikke rette i den), denne app. har en knap, som kalder en motode "do()" i en dll. Jeg kan rette "do()". Her gemmer jeg noget data og starter så en anden app. via wshShell.run. Denne app. skal så hente de data som jeg netop har gemt.

For at gemme data, har jeg lavet en dll, med et modul som holder en static variabel til en klasse.

Ideen er at der kun skal være én instans af mit data-objekt (et slags singleton pattern).

Måske lidt kode vil hjælpe:

-- Den app. (.exe) som jeg ikke har lavet kalder denne metode.
-- Her laver jeg mit data-objekt (singleton), gemmer data og kalder wshshell.run
-- dll'en er sat op som MultiUse
Public Sub do()
Dim singleton As Object

Set singleton = CreateObject("Singleton.clsMain").getSingletonInstance

' do login stuff

singleton.setLoggedOn true

Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "MyApp.exe"
Set WshShell = Nothing
end Sub


-- Dette er mit data-objekt (projekt)
-- clsMain (Klass sat til MultiUse)
Public Function getSingletonInstance() As clsSingleton
Set getSingletonInstance = getSingleton
End Function

--modGetSingleton (module)
Public Function getSingleton() As clsSingleton
Static Singleton As clsSingleton
If Singleton Is Nothing Then
MsgBox "NEW SINGLETON"
Set Singleton = New clsSingleton
Else
MsgBox "OLD SINGLETON"
End If
Set getSingleton = Singleton
Exit Function
End Function

-- clsSingleton (Klass sat til PrivateNotCreatable)
Private loggedOn As Boolean

Public Sub setLoggedOn(aLoggedOn As Boolean)
loggedOn = aLoggedOn
End Sub

Public Function getLoggedOn() As Boolean
getLoggedOn = loggedOn
End Function


-- Dette er min egen app. MyApp som er en standard.exe
-- modMain (module)
Public Sub Main()
doIt
End Sub

Public Sub doIt()
Dim singleton As Object
Dim loggedOn As Boolean

Set singleton = CreateObject("Singleton.clsMain").getSingletonInstance
Set loggedOn = singleton.getLoggedOn

If loggedOn Then
MsgBox "LOGGED ON"
Else
MsgBox "NOT LOGGED ON"
End If
End Sub


Når jeg starter den applikation som jeg ikke selv har lavet, bliver jeg præsenteret for en knap.

Første gang jeg trykker på knappen, kalder den "do()" på den dll som jeg kan rette. Her laves en instans af singleton (popup "NEW SINGLETON"), sætter loggedOn og kalder wshshell.run. MyApp prøver at få fat i samme instans af singleton, men laver en ny (popup "NEW SINGLETON") efterfulgt med "NOT LOGGED ON".

Anden gang jeg trykker på knappen, kaldes "do()" igen. Men i stedet for at lave en ny instans af singleton, fanges den eksisterende (som MyApp ikke kunne finde) og "OLD SINGELTON" popper op, så sættes loggedOn, og så wshshell.run. MyApp gør som før, laver en ny singelton "NEW SINGLETON" og så "NOT LOGGED ON".

Singelton er altså kendt i dll'en/"do()", lige meget hvor mange gange jeg trykker på knappen, men den er aldrig kendt fra MyApp?

For at gøre det hele være, så virker det som det skal når jeg kører det i debug? Her popper "NEW SINGLETON" kun op én gang?


Målet med det hele er at "do()" skal gemme noget data, som skal hentes fra en anden application, startet fra "do()". "do()" skal afsluttes så hurtigt som muligt. Den anden app. skal gøre alt arbejdet.


Jeg håber at der er nogen som kan hjælpe mig!
Avatar billede pcnovice Nybegynder
26. august 2005 - 10:08 #1
Lukker
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