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!