Seite 1 von 2

COMatePLUS Schreibweise

Verfasst: 13.12.2012 15:10
von kunstlust
Ich habe mal eine Frage, warum die Schreibweise der Schnittstelle über die COMate so kompliziert ist. In AutoIT und und Lazarus werden die Objekte in Ihren Aufruf durch einfache Punkte getrennt "Excel.WorkBooks.Add". Gerade beim Aufruf von GetObjectProperty mit x Klammern und '"' komme ich schnell durcheinander und der Code ist nicht so gut lesbar. Gibt es dazu in PB noch eine Alternative, neben dem DLL Aufruf der Applikation?

Danke für Tips

Re: COMatePLUS Schreibweise

Verfasst: 13.12.2012 15:44
von shadow
Wie bitte?

Ansonsten kannst du mit Makros quasi deine eigene Programmiersprache mit PureBasic entwickeln (gibt einige schöne Beispiele hier im Forum).
Der Punkt-Operator ist in PureBasic der Indikator für einen anschließenden Datentyp, soll heißen so eine Schreibweise kriegst du in PB wohl nicht hin.

COMatePLUS Schreibweise

Verfasst: 13.12.2012 15:58
von kunstlust
Macht es ein Makro in der Übersicht leichter. Ich habe damit noch nie gearbeitet? Ich schaue mir das mal an, danke für den Tip.

Re: COMatePLUS Schreibweise

Verfasst: 13.12.2012 16:11
von Kiffi
kunstlust hat geschrieben:Ich habe mal eine Frage, warum die Schreibweise der Schnittstelle über die COMate so kompliziert ist.
wenn Du wüsstest, wie kompliziert das ganze ohne COMate ist... :lol:

Grüße ... Kiffi

Re: COMatePLUS Schreibweise

Verfasst: 13.12.2012 18:36
von kunstlust
Kiffi hat geschrieben:
kunstlust hat geschrieben:Ich habe mal eine Frage, warum die Schreibweise der Schnittstelle über die COMate so kompliziert ist.
wenn Du wüsstest, wie kompliziert das ganze ohne COMate ist... :lol:

Grüße ... Kiffi
Ich ahne es, aber ich würde mich über eine kurze Erläuterung freuen :-)

Re: COMatePLUS Schreibweise

Verfasst: 14.12.2012 10:09
von kunstlust
Ich habe mir die Macrofunktion angeschaut, aber ich verstehe noch nicht wie ich eine String für meinen "Hersteller" in einem Befehl zurück bekomme. Schön wäre in meinem Beispiel das mir das snmpget auch gleich die Rückgabe der MIB als String zurückgibt, geht das mit überhaupt Macros?

Danke für Tips

Code: Alles auswählen

XIncludeFile "COMatePLUS.pbi" 
InitNetwork()

Macro snmpget(IP,MIB)
  objSNMP.COMateObject
  objSNMP = COMate_CreateObject("OlePrn.OleSNMP") 
  If objSNMP
    objSNMP\Invoke("Open('" + IP + "', 'public', 2,1000)")
    hersteller.s= objSNMP\GetStringProperty("Get('"+MIB+"')")
  EndIf
  
EndMacro

snmpget("192.168.110.147",".1.3.6.1.4.1.11.2.3.9.1.1.7.0")
Debug Hersteller; Dieser String sollte eigentlich gleich vom snmpget kommen.... 

Re: COMatePLUS Schreibweise

Verfasst: 14.12.2012 11:07
von Kiffi
kunstlust hat geschrieben:Ich ahne es, aber ich würde mich über eine kurze Erläuterung freuen :-)
für eine kurze Erläuterung ist das Thema (zumindest für mich)
ein wenig zu komplex.

Aber lies zur Einführung mal das hier:
http://www.purebasic.fr/german/viewtopic.php?f=3&t=8126

Dieser Thread war IMO die Geburtsstunde von ComHelper und DispHelper, die den
Zugriff auf COM-Objekte erheblich vereinfachten. Später kam dann COMate, welches
noch einmal ein Stück komfortabler war.

Grüße ... Kiffi

Re: COMatePLUS Schreibweise

Verfasst: 14.12.2012 15:59
von kunstlust
Kiffi hat geschrieben:
kunstlust hat geschrieben:Ich ahne es, aber ich würde mich über eine kurze Erläuterung freuen :-)
für eine kurze Erläuterung ist das Thema (zumindest für mich)
ein wenig zu komplex.
Ich danke dir für die Info Kiffi.

Code: Alles auswählen

XIncludeFile "COMatePLUS.pbi" 
InitNetwork()

Procedure.s snmpget(IP,MIB)
  objSNMP.COMateObject
  objSNMP = COMate_CreateObject("OlePrn.OleSNMP") 
  If objSNMP
    objSNMP\Invoke("Open('" + IP + "', 'public', 2,1000)")
    ProcedureReturn objSNMP\GetStringProperty("Get('"+MIB+"')")
    Else
    ProcedureReturn "Fehler"
  EndIf
  
EndProcedure

Debug snmpget("192.168.110.147",".1.3.6.1.4.1.11.2.3.9.1.1.7.0")

Zu meiner Macrofrage, scheint es keine Rückgabe zu geben, wir mir scheint. Also geht es nur mit einer Prozedur, oder?
Ist es möglich in einer Prozedur String & Integer gemischt zu übergeben, ich bekomme bei gleichen auf wie bei Macro immer Fehler der Variablen,
muss ich zwei Prozeduren von machen? Oder gibt es da einen Trick?

Gruß Kunstlust

Re: COMatePLUS Schreibweise

Verfasst: 14.12.2012 17:13
von kunstlust
Nun habe ich es doch selber hinbekommen, Handbuch lesen hilft oft...

Code: Alles auswählen

XIncludeFile "COMatePLUS.pbi" 
InitNetwork()

Procedure.s snmpget(IP.s,MIB.s)
  objSNMP.COMateObject
  objSNMP = COMate_CreateObject("OlePrn.OleSNMP") 
  If objSNMP
    objSNMP\Invoke("Open('" + IP + "', 'public', 2,1000)")
    result$= objSNMP\GetStringProperty("Get('"+MIB+"')")
  EndIf
  If result$ =""
    result$=  "Fehler: " + COMate_GetLastErrorDescription() 
  EndIf
  ProcedureReturn result$
EndProcedure

Debug  snmpget("192.168.110.147",".1.3.6.1.4.1.11.2.3.9.1.1.7.0")


Re: COMatePLUS Schreibweise

Verfasst: 14.12.2012 17:29
von Kiffi
und bitte daran denken, mit CreateObject()
erzeugte Objekte auch wieder freizugeben.

Code: Alles auswählen

Procedure.s snmpget(IP.s,MIB.s)
  
  Protected objSNMP.COMateObject
  Protected ReturnValue.s
  
  objSNMP = COMate_CreateObject("OlePrn.OleSNMP") 
  
  If objSNMP
    objSNMP\Invoke("Open('" + IP + "', 'public', 2,1000)")
    ReturnValue = objSNMP\GetStringProperty("Get('"+MIB+"')")
    objSNMP\Release()
  EndIf
  
  If ReturnValue = "" ; Hier eigentlich eher COMate_GetLastErrorCode() abfragen
    ReturnValue = "Fehler: " + COMate_GetLastErrorDescription() 
  EndIf
  
  ProcedureReturn ReturnValue
  
EndProcedure
Grüße ... Kiffi