COM Object Methode Return Parameter Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

tschindler
Posts: 4
Joined: 24 Jun 2020, 02:35

COM Object Methode Return Parameter

Post by tschindler » 24 Jun 2020, 03:17

ahk: 1.1.32.00 (64bit)
ich benoetige Eure Hilfe. Ich habe bisher keine Erfahrung mit ahk scripten. Moechte aber als Auftragsarbeit eine COM Methode ausfuehren und einen Rueckgabe Parameter auswerten. Die Methode fuehrt ein vbscript (script_ahk) aus, dessen Rueckgabe Parameter (strOutput) ich beeinflussen kann. Das COM Object selbst ist von einem Dritt-Anbieter, auf dessen Methoden ich aber keinen Einfluss haben. Ist die Rueckgabe <>1 soll der Rueckgabe String ausgewertet werden. Ansonsten wird in einer Applikation ein Form Objekt geoeffnet.
Der Rueckgabe Parameter der COM Methode ist 'strOutput' und wird vom vbscript via 'OutputParams' gefuettert. ahk initialisiert zur Laufzeit 'strOutput' als Globale Variable und weist 'Null' zu. Nach Ausfuehren der COM Methode bleibt der Wert aber Null.
Hat jemand eine Idee, wie die Rueckgabe ausgewertet werden kann?

Folgendes ahk Script soll das verdeutlichen:

Code: Select all

strScript := "script_ahk"
strTicket := "12345678"
objOT := ComObjCreate("OtClient.OTClientAut")
objOT.InvokeAction(strScript, strTicket, strOutput)
If Not (strOutput = 1) MsgBox % strOutput
Das vbscript 'script_ahk' sieht in etwa so aus:

Code: Select all

Dim strTicket, intTicketID, strOutput
strTicket = Trim(Cstr(InputParams))    
If InStr(strTicket, "-") > 0 Then
	intTicketID = get_ticket(strTicket)
	If intTicketID > 0 Then
	    OpenRequest intTicketID, False, False
	    strOutput = "1"
	Else
	    strOutput = "Ticket number not found: " & strTicket
    End If
Else
	strOutput = "Ticket number incorrectly formatted: " & strTicket
End If
OutputParams = strOutput

User avatar
haichen
Posts: 540
Joined: 09 Feb 2014, 08:24

Re: COM Object Methode Return Parameter

Post by haichen » 24 Jun 2020, 04:44

Versuchs mal so:

Code: Select all

If Not (strOutput = 1)         ;hier darf außer einem Kommentar höchstens noch eine öffnende { Klammer stehen
	MsgBox, % strOutput
Wenn du zB. auf das if im Codeblock klickst kommst du direkt zur Hilfe.

User avatar
haichen
Posts: 540
Joined: 09 Feb 2014, 08:24

Re: COM Object Methode Return Parameter

Post by haichen » 24 Jun 2020, 04:56

Vielleicht mußt du auch das InvokeAction() ändern.

Code: Select all

strOutput:=objOT.InvokeAction(strScript, strTicket, strOutput)
;oder
strOutput =
objOT.InvokeAction(strScript, strTicket, strOutput)

tschindler
Posts: 4
Joined: 24 Jun 2020, 02:35

Re: COM Object Methode Return Parameter

Post by tschindler » 24 Jun 2020, 07:07

Vielen Dank erst einmal. Den Fehler mit der Msgbox habe ich korrigiert. Es aendert aber am Ergebnis nichts.
Die Idee mit der Zuweisung der COM Methode zu einer Variable hatte ich bereits. Das funktioniert aber nicht, da die Rueckgabe im Parameter strOutput steht. Wenn #Warn aktiv ist, meldet ahk einen Fehler, dass die Globale Variable strOutput nicht zugewiesen waere:
Warning: This variable has not been assigned a value.
Specifically: strOutput (a global variable)

Ich hatte testweise die Implementierung in vbscript gemacht. Der vbscript Interpreter kann damit umgehen und wertet strOutput aus. Es geht an der Stelle somit eigentlich um die Konvertierung der in vbscript recht simplen Implementierung auf ahk.
Ich kann nur vermuten, das der von ahk verwendete COM Wrapper die Rueckgabe 'verschluckt'.

Beispiel fuer die Implementierung in vbscript:

Code: Select all

Dim objOT, strOutput 
On Error Resume Next
Set objOT = CreateObject("OtClient.OTClientAut") 
objOT.InvokeAction "script_ahk", "12345678", strOutput
If Not strOutput = 1 Then msgbox strOutput

User avatar
haichen
Posts: 540
Joined: 09 Feb 2014, 08:24

Re: COM Object Methode Return Parameter

Post by haichen » 24 Jun 2020, 08:13

Ich kann da nur raten. Leider zu wenig Ahnung. Ich störe mich ein wenig an der Wertrückgabe in der Klammer.
Mein Schuß wäre jetzt : strOutput:=objOT.InvokeAction(strScript, strTicket)
Ich finde das Problem interessant, viellecht meldet sich ja noch jemand der es weiß.

tschindler
Posts: 4
Joined: 24 Jun 2020, 02:35

Re: COM Object Methode Return Parameter

Post by tschindler » 24 Jun 2020, 08:57

Danke Dir. Das hatte ich allerdings auch schon probiert ;) Da beschwert sich dann aber die Methode ueber eine 'unzulaessige Parameteranzahl'.
Das mit dem Rueckgabewert in der Klammer ist mir auch suspekt. Ist eigentlich unueblich. Bei C bspw. wird ja Return in einer Funktion genauso gehandhabt wie bspw. bei ahk (nicht dass ich jetzt hier Aepfel mit Birnen vergleichen moechte).
Ja, vermutlich ist hier jemand gefragt, der sich mit der COM Entwicklung auskennt. Mich wundert eben nur, dass es mit vbscript probblemlos klappt.
Alternative waere via 'ScriptControl' das vbscript einzubinden. Leider gibts bei uns nur die 64bit ahk Version. Da wird ScriptControl nicht unterstuetzt.

just me
Posts: 7299
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: COM Object Methode Return Parameter

Post by just me » 24 Jun 2020, 11:10

Ich bin kein COM-Experte, schon gar nicht bei mir unbekannten Objekten. Wenn Du allerdings in strOutput einen Rückgabewert erwartest, musst Du einen ByRef Parameter übergeben, der vorher auf die maximal erwartete Kapazität gebracht wird. Wie man das macht, kann man mit etwas Glück der AHK-COM-Doku entnehmen.

tschindler
Posts: 4
Joined: 24 Jun 2020, 02:35

Re: COM Object Methode Return Parameter  Topic is solved

Post by tschindler » 25 Jun 2020, 06:03

Vielen Dank. Aber leider habe ich keinen Einfluss auf die Verarbeitung der Parameter innerhalb der COM Methode.
Ich beschaeftige mich auch schon wieder zu lange mit dem Problem und irgendwann muss man andere Loesungen suchen. Die Rueckgabe wird eigentlich nur mit debugging infos gefuellt. Wenn bspw. der Syntax des Eingangsparameters falsch ist (12345678 ist natuerlich nur ein Platzhalter). Oder das zu oeffnende Objekt nicht gefunden wird. Wir loesen die Pruefung jetzt im ahk script. Dort ist es eh besser aufgehoben. Trotzdem vielen Dank fuer Euren Input. Das hat mir trotzdem geholfen.

Post Reply

Return to “Ich brauche Hilfe”