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...
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...
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