COMatePLUS Schreibweise

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

COMatePLUS Schreibweise

Beitrag 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
Benutzeravatar
shadow
Beiträge: 189
Registriert: 23.03.2005 17:52
Wohnort: Lübeck

Re: COMatePLUS Schreibweise

Beitrag 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.
ThinkPad T61 (in Gedenken) | PureBasic 4.61 B1 (32) | Windows 7 (32SP1) | ArchLinux (32) | Syllable (32)
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

COMatePLUS Schreibweise

Beitrag 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.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COMatePLUS Schreibweise

Beitrag 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
a²+b²=mc²
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: COMatePLUS Schreibweise

Beitrag 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 :-)
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: COMatePLUS Schreibweise

Beitrag 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.... 
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COMatePLUS Schreibweise

Beitrag 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
a²+b²=mc²
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: COMatePLUS Schreibweise

Beitrag 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
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: COMatePLUS Schreibweise

Beitrag 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")

Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COMatePLUS Schreibweise

Beitrag 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
a²+b²=mc²
Antworten