... das ist perfekt. Vielen Dank für Deine schnelle Hilfe!
Viele Grüße
Thomas
... das ist perfekt. Vielen Dank für Deine schnelle Hilfe!
Viele Grüße
Thomas
Hi Aspirinjunkie,
vielen Dank für Deine schnelle Antwort.
Ich hatte mich erst einmal an einem Beispielscript versucht, dass der UDF beilag. Die Funktion, die den Fehler lieferte, war nachfolgende: _XML_Load($oXmlDoc, $sXmlFileName)
Das komplette Listing des Beispiels sieht dabei so aus:
;~ https://www.autoitscript.com/forum/topic/176972-xml-parsing-need-help/
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w 7
#Tidy_Parameters=/sort_funcs /reel
#include <array.au3>
#include <date.au3>
#include "XML.au3"
; This is SetUp for the transfer UDF internal COM Error Handler to the user function
_XML_ComErrorHandler_UserFunction(_ErrFunc_CustomUserHandler)
_Tasks_XML()
Func _ErrFunc_CustomUserHandler($oError)
ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
@TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
@TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
@TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
@TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
@TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
@TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
@TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
@TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
@TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc ;==>_ErrFunc_CustomUserHandler
Func _Tasks_XML()
Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc_CustomUserHandler")
#forceref $oErrorHandler
; Add user ComError handler ; it will be used toogether with internal ComError handler
_XML_ComErrorHandler_UserFunction(_ErrFunc_CustomUserHandler)
Local $sXmlFile = @ScriptDir & "\TestData.xml"
Local $oXmlDoc = _XML_CreateDOMDocument()
_XML_Load($oXmlDoc, $sXmlFile)
If @error Then
MsgBox($MB_SYSTEMMODAL + $MB_ICONINFORMATION, 'ERR:' & @error & ' EXT:' & @extended, XML_My_ErrorParser(@error, @extended))
MsgBox($MB_SYSTEMMODAL + $MB_ICONINFORMATION, '_XML_Load', _XML_ErrorParser_GetDescription($oXMLDoc))
;Return 0
EndIf
Local $oNodesColl = _XML_SelectNodes($oXmlDoc, "//Task")
If @error Then
MsgBox($MB_SYSTEMMODAL + $MB_ICONINFORMATION, 'ERR:' & @error & ' EXT:' & @extended, XML_My_ErrorParser(@error, @extended))
MsgBox($MB_SYSTEMMODAL + $MB_ICONINFORMATION, '_XML_SelectNodes', _XML_ErrorParser_GetDescription($oXMLDoc))
;Return 0
EndIf
Local $aTaskList[0][2]
Local $iPrevUbound = UBound($aTaskList)
For $oNodeEnum In $oNodesColl
$iPrevUbound = UBound($aTaskList)
ReDim $aTaskList[$iPrevUbound + 1][2]
$aTaskList[$iPrevUbound][0] = $oNodeEnum.selectSingleNode('MangaName').text
$aTaskList[$iPrevUbound][1] = $oNodeEnum.selectSingleNode('Website').text
Next
_ArrayDisplay($aTaskList, '$aTaskList')
EndFunc ;==>_Tasks_XML
Func XML_My_ErrorParser($iXMLWrapper_Error, $iXMLWrapper_Extended = 0)
Local $sErrorInfo = ''
Switch $iXMLWrapper_Error
Case $XML_ERR_SUCCESS
$sErrorInfo = '$XML_ERR_SUCCESS=' & $XML_ERR_SUCCESS & @CRLF & 'All is ok.'
Case $XML_ERR_GENERAL
$sErrorInfo = '$XML_ERR_GENERAL=' & $XML_ERR_GENERAL & @CRLF & 'The error which is not specifically defined.'
Case $XML_ERR_COMERROR
$sErrorInfo = '$XML_ERR_COMERROR=' & $XML_ERR_COMERROR & @CRLF & 'COM ERROR OCCURED. Check @extended and your own error handler function for details.'
Case $XML_ERR_ISNOTOBJECT
$sErrorInfo = '$XML_ERR_ISNOTOBJECT=' & $XML_ERR_ISNOTOBJECT & @CRLF & 'No object passed to function'
Case $XML_ERR_INVALIDDOMDOC
$sErrorInfo = '$XML_ERR_INVALIDDOMDOC=' & $XML_ERR_INVALIDDOMDOC & @CRLF & 'Invalid object passed to function'
Case $XML_ERR_PARSE
$sErrorInfo = '$XML_ERR_PARSE=' & $XML_ERR_PARSE & @CRLF & 'Error: with Parsing objects, .parseError.errorCode=' & $iXMLWrapper_Extended & ' Use _XML_ErrorParser_GetDescription() for get details.'
Case $XML_ERR_LOAD
$sErrorInfo = '$XML_ERR_LOAD=' & $XML_ERR_LOAD & @CRLF & 'Error opening specified file.'
Case $XML_ERR_SAVE
$sErrorInfo = '$XML_ERR_SAVE=' & $XML_ERR_SAVE & @CRLF & 'Error saving file.'
Case $XML_ERR_XPATH
$sErrorInfo = '$XML_ERR_XPATH=' & $XML_ERR_XPATH & @CRLF & 'XPath syntax error - check also COM Error Handler.'
Case $XML_ERR_DOMVERSION
$sErrorInfo = '$XML_ERR_DOMVERSION=' & $XML_ERR_DOMVERSION & @CRLF & 'DOM Version: ' & 'MSXML Version ' & $iXMLWrapper_Extended & ' or greater required for this function'
Case $XML_ERR_PARAMETER
$sErrorInfo = '$XML_ERR_PARAMETER=' & $XML_ERR_PARAMETER & @CRLF & 'Wrong parameter passed to function.'
Case $XML_ERR_ARRAY
$sErrorInfo = '$XML_ERR_ARRAY=' & $XML_ERR_ARRAY & @CRLF & 'Wrong array parameter passed to function. Check array dimension and conent.'
Case $XML_ERR_NODECREATE
$sErrorInfo = '$XML_ERR_NODECREATE=' & $XML_ERR_NODECREATE & @CRLF & 'Can not create Node - check also extended for node type'
Case $XML_ERR_NODEAPPEND
$sErrorInfo = '$XML_ERR_NODEAPPEND=' & $XML_ERR_NODEAPPEND & @CRLF & 'Can not append Node - check also extended for node type'
Case $XML_ERR_EMPTYCOLLECTION
$sErrorInfo = '$XML_ERR_EMPTYCOLLECTION=' & $XML_ERR_EMPTYCOLLECTION & @CRLF & 'Collections of objects was empty'
Case $XML_ERR_NONODESMATCH
$sErrorInfo = '$XML_ERR_NONODESMATCH=' & $XML_ERR_NONODESMATCH & @CRLF & 'No nodes match the XPath expression'
Case $XML_ERR_PARSE_XSL
$sErrorInfo = '$XML_ERR_PARSE_XSL=' & $XML_ERR_PARSE_XSL & @CRLF & 'Error with Parsing XSL objects .parseError.errorCode=' & $iXMLWrapper_Extended & ' Use _XML_ErrorParser_GetDescription() for get details.'
Case $XML_ERR_NOATTRMATCH
$sErrorInfo = '$XML_ERR_NOATTRMATCH=' & $XML_ERR_NOATTRMATCH & @CRLF & 'There is no such attribute in selected node.'
Case $XML_ERR_NOCHILDMATCH
$sErrorInfo = '$XML_ERR_NOCHILDMATCH=' & $XML_ERR_NOCHILDMATCH & @CRLF & 'There is no Child in nodes matched by XPath expression.'
Case $XML_ERR_OBJCREATE
$sErrorInfo = '$XML_ERR_OBJCREATE=' & $XML_ERR_OBJCREATE & @CRLF & 'Object can not be created.'
Case $XML_ERR_INVALIDATTRIB
$sErrorInfo = '$XML_ERR_INVALIDATTRIB=' & $XML_ERR_INVALIDATTRIB & @CRLF & 'Invalid object passed to function.'
Case $XML_ERR_INVALIDNODETYPE
$sErrorInfo = '$XML_ERR_INVALIDNODETYPE=' & $XML_ERR_INVALIDNODETYPE & @CRLF & 'Invalid object passed to function.'
Case Else
$sErrorInfo = '=' & $iXMLWrapper_Error & @CRLF & 'NO ERROR DESCRIPTION FOR THIS @error'
EndSwitch
Local $sExtendedInfo = ''
Switch $iXMLWrapper_Error
Case $XML_ERR_COMERROR
$sExtendedInfo = 'COM ERROR NUMBER (@error returned via @extended) =' & $iXMLWrapper_Extended
Case $XML_ERR_PARAMETER
$sExtendedInfo = 'This @error was fired by parameter: #' & $iXMLWrapper_Extended
Case $XML_ERR_INVALIDNODETYPE
$sExtendedInfo = 'You are passed to function node.type=' & $iXMLWrapper_Extended
Case Else
Switch $iXMLWrapper_Extended
Case $XML_EXT_DEFAULT
$sExtendedInfo = '$XML_EXT_DEFAULT=' & $XML_EXT_DEFAULT & @CRLF & 'Default - Do not return any additional information'
Case $XML_EXT_DEFAULT
$sExtendedInfo = '$XML_EXT_DEFAULT=' & $XML_EXT_DEFAULT & @CRLF & 'The extended which is not specifically defined.'
Case $XML_EXT_XMLDOM
$sExtendedInfo = '$XML_EXT_XMLDOM=' & $XML_EXT_XMLDOM & @CRLF & '"Microsoft.XMLDOM" related Error'
Case $XML_EXT_DOMDOCUMENT
$sExtendedInfo = '$XML_EXT_DOMDOCUMENT=' & $XML_EXT_DOMDOCUMENT & @CRLF & '"Msxml2.DOMDocument" related Error'
Case $XML_EXT_XSLTEMPLATE
$sExtendedInfo = '$XML_EXT_XSLTEMPLATE=' & $XML_EXT_XSLTEMPLATE & @CRLF & '"Msxml2.XSLTemplate" related Error'
Case $XML_EXT_SAXXMLREADER
$sExtendedInfo = '$XML_EXT_SAXXMLREADER=' & $XML_EXT_SAXXMLREADER & @CRLF & '"MSXML2.SAXXMLReader" related Error'
Case $XML_EXT_MXXMLWRITER
$sExtendedInfo = '$XML_EXT_MXXMLWRITER=' & $XML_EXT_MXXMLWRITER & @CRLF & '"MSXML2.MXXMLWriter" related Error'
Case $XML_EXT_FREETHREADEDDOMDOCUMENT
$sExtendedInfo = '$XML_EXT_FREETHREADEDDOMDOCUMENT=' & $XML_EXT_FREETHREADEDDOMDOCUMENT & @CRLF & '"Msxml2.FreeThreadedDOMDocument" related Error'
Case $XML_EXT_XMLSCHEMACACHE
$sExtendedInfo = '$XML_EXT_XMLSCHEMACACHE=' & $XML_EXT_XMLSCHEMACACHE & @CRLF & '"Msxml2.XMLSchemaCache." related Error'
Case $XML_EXT_STREAM
$sExtendedInfo = '$XML_EXT_STREAM=' & $XML_EXT_STREAM & @CRLF & '"ADODB.STREAM" related Error'
Case $XML_EXT_ENCODING
$sExtendedInfo = '$XML_EXT_ENCODING=' & $XML_EXT_ENCODING & @CRLF & 'Encoding related Error'
Case Else
$sExtendedInfo = '$iXMLWrapper_Extended=' & $iXMLWrapper_Extended & @CRLF & 'NO ERROR DESCRIPTION FOR THIS @extened'
EndSwitch
EndSwitch
; return back @error and @extended for further debuging
Return SetError($iXMLWrapper_Error, $iXMLWrapper_Extended, _
'@error description:' & @CRLF & _
$sErrorInfo & @CRLF & _
@CRLF & _
'@extended description:' & @CRLF & _
$sExtendedInfo & @CRLF & _
'')
EndFunc ;==>XML_My_ErrorParser
Alles anzeigen
Ich habe mich auf auf nachfolgende drei Zeilen bezogen:
Local $sXmlFile = @ScriptDir & "\TestData.xml"
Local $oXmlDoc = _XML_CreateDOMDocument()
_XML_Load($oXmlDoc, $sXmlFile)
Bereits das Laden der XML-Datei schlug fehl und ich vermutete eher ein Fehler in der XML-Datei. War mir aber unsicher ...
Bitte entschuldige!
Dein Listing verarbeitet die XML-Datei ohne Murren - perfekt geradezu. Lediglich scheinen die einzelnen Nodes nicht richtig in die "Zeilen" des Arrays umgelesen zu werden - dort steht in jeder "Zeile" derselbe Inhalt. Hast Du hier noch einen Tipp, bitte?
Nochmals vielen Dank,
viele Grüße
Thomas
Hallo Zusammen,
ich verzweifele gerade ein wenig an nachfolgendem Vorhaben: Gerne würde ich Daten, die in einer XML-Datei vorliegen, in ein 2D Array einlesen und automatisiert weiter verarbeiten. Hierzu wollte ich die XML.au3 in der Version 1.1.1.13 verwenden.
Hier einmal der Inhalt der XML-Datei:
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="result_data" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="result_data">
<xs:complexType>
<xs:sequence>
<xs:element name="step" type="xs:int" minOccurs="0" />
<xs:element name="cycle" type="xs:int" minOccurs="0" />
<xs:element name="braking" type="xs:int" minOccurs="0" />
<xs:element name="time" type="xs:double" minOccurs="0" />
<xs:element name="torque" type="xs:double" minOccurs="0" />
<xs:element name="pressure" type="xs:double" minOccurs="0" />
<xs:element name="temp" type="xs:double" minOccurs="0" />
<xs:element name="speed" type="xs:double" minOccurs="0" />
<xs:element name="friction" type="xs:double" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<result_data>
<step>1</step>
<cycle>1</cycle>
<braking>1</braking>
<time>0.05</time>
<torque>143</torque>
<pressure>9.4</pressure>
<temp>40.5</temp>
<speed>660</speed>
<friction>0.254</friction>
</result_data>
<result_data>
<step>1</step>
<cycle>1</cycle>
<braking>1</braking>
<time>0.1</time>
<torque>153.6</torque>
<pressure>9.2</pressure>
<temp>40.5</temp>
<speed>660</speed>
<friction>0.279</friction>
</result_data>
<result_data>
<step>1</step>
<cycle>1</cycle>
<braking>1</braking>
<time>0.15</time>
<torque>149.1</torque>
<pressure>8.9</pressure>
<temp>40.5</temp>
<speed>660</speed>
<friction>0.28</friction>
</result_data>
<result_data>
<step>1</step>
<cycle>1</cycle>
<braking>1</braking>
<time>0.2</time>
<torque>148.6</torque>
<pressure>8.9</pressure>
<temp>40.9</temp>
<speed>660</speed>
<friction>0.279</friction>
</result_data>
</NewDataSet>
Alles anzeigen
Es geht hier um 9 Spalten mit Werten. Wenn ich diese Datei mithilfe der UDF und _XML_Load($oXmlDoc, $sXmlFileName) einlese, dann erhalte ich stets "Collections of Objects was empty" bzw. "Default - Do not return any additional information".
Entlang gehangelt habe ich mich mithilfe der Beispieldatei "XML__Examples_User_DarkAqua__Tasks.au3" aus dem ZIP-File der XML.UDF. Die Beispiele mit den Beispiel-XML-Dateien funktionieren auch einwandfrei.
Ich hatte zunächst den Aufbau der XML-Datei im Verdacht, jedoch kann ich die Datei ohne Probleme in z. B. Excel öffnen und auch eine Validierung des XML ergab keine Fehler.
Hat jemand von euch vielleicht eine Idee, wo hier der Fehler liegt?
Besten Dank vorab,
viele Grüße
Thomas
... das kannte ich tatsächlich schon.
Was ich allerdings bräuchte ist der Name des Druckers, der im Dialog ausgewählt wurde. Das muss ja nicht unbedingt der Standard-Drucker sein. Die Anzahl der zu druckenden Seiten gibt das STRUCT ja wieder, aber interessant wäre eben auch der Name.
In der Folge lese ich dann von diesem Gerät über den Namen alle möglichen Dinge aus wie Auflösung, Seitengröße, etc.
Viele Grüße
Thomas
Hallo Moombas,
... leider nein, per Default steht dort immer eine "1". Der Anwender ändert dann den Wert auf die Anzahl der Kopien, die er benötigt.
Die Au3Info.exe wäre noch ein Weg, ja. Ich hatte allerdings die Hoffnung, das die UDF da eine Möglichkeit bietet, die ich nur einfach noch nicht gefunden habe.
Viele Grüße
TheDude
Hallo Zusammen,
um aus meinen AutoIt Scripten Ausdrucke zu erstellen verwende ich die printMGv2.au3.
Für ein aktuelles Projekt muss ich jedoch aus dem Druckdialog, welcher mit der Funktion _PrintSetPrinter aufgerufen wird, die Anzahl der dort vorgegebenen Kopien ermitteln um dann über _PrintStartPrint(Handle,Anzahl) die Anzahl der Kopien zu drucken:
Hat jemand von euch vielleicht einen Tipp für mich, wie ich die Anzahl aus dem Dialog auslesen kann?
Für eure Hilfe wie immer besten Dank!
Viele Grüße
TheDude
Hallo Water,
...
Ich hatte das englische Forum nicht auf dem Schirm. Wieder einmal vielen Dank für Deine schnelle Hilfe.
Viele Grüße & ein schönes Wochenende
The Dude
Hallo Zusammen,
ich würde gerne ein Autoit-Script/Programm als Dienst laufen lassen. Nachfolgende Funktionen sollen dabei integriert werden:
Es sind keine Interaktionen mit dem Anwender geplant.
Grundsätzlich bekomme ich die Funktionen ans Laufen, jedoch wäre es prima, wenn ihr mir den ein oder anderen Tipp geben würdet, was beachtet werden muss, wenn man ein Autoit-Programm als Dienst laufen lassen möchte (Schleifen, Eventhandling, Beenden beim Herunterfahren von Windows, etc.).
Schon einmal jetzt vielen Dank für eure Hilfe,
viele Grüße
The Dude
Hallo Zusammen,
... danke euch für eure Tipps.
Ich habe mal die Rückgabe überprüft - sie ist OK. Auch das Thema 32Bit kann ich auschließen. Das Script ist mit 32Bit kompilliert und auch das Excel ist 32Bit.
Was sei könnte (warum auch immer) ist, dass die Excel-Datei einen weg hat(te). Ich habe nach meinem Post hier noch ein paar Tests gemacht und gesehen, dass andere Dateien einwandfrei funktionieren. Dann habe ich mal eine kleine Änderung in der ersten Excel-Datei vorgenommen und diese dann gespeichert. Nun klappt wieder alles prima.
Kurioserweise ließ sich die ursprüngliche Datei ohne Fehler in Excel öffnen.
Was nun das AutoIt zum Absturz gebracht hat, konnte ich leider nicht herausfinden. Ich setze den Thread aber mal auf gelöst.
Nochmals vielen Dank,
Grüße
TheDude
Hallo Zusammen,
ich habe hier ein kleines Script, was Daten in eine Excel-Datei pasten soll. In Scite als Übergabe an AutoIt3.exe klappt das ganze auch prima, aber wenn ich das Script dann zu einer EXE "kompilliere", dann stürzt es mit der Fehlermeldung "Line 7881 Error: Variable must be of type 'object'".
Ich habe die betreffende Zeilen aus dem Script mal herauskopiert:
$oExcel = _Excel_Open($ExcelAnzeigen,False,$ExcelAnzeigen,True,True)
If @error Then
MsgBox(64+8192,"","Problem beim Starten des Excel-Connectors!")
Return 0
EndIf
$oWorkbook = _Excel_BookOpen($oExcel, $TemplateCopy)
Sleep(1000)
; Bis hier ist alles OK, dann stürzt das Programm ab ...
_GUICtrlStatusBar_SetText($StatusBar," Füge " & $AnzahlFiles & " Zeilen in Excel-Sheet ein ...")
_Excel_RangeInsert($oWorkbook.Activesheet,"4:" & $AnzahlFiles)
_GUICtrlStatusBar_SetText($StatusBar," Füge Daten in neue Zeilen ein ...")
$oWorkbook.Activesheet.Paste($oWorkbook.Activesheet.Range("A3"))
GUISetState(@SW_ENABLE,$frmMain)
GUISetCursor(2, 0, $frmMain)
_GUICtrlStatusBar_SetText($StatusBar," " & $TemplateCopy & " wurde erstellt und wird nun geöffnet!")
_Excel_BookSave($oWorkbook)
If $ExcelAnzeigen = False Then
_Excel_BookClose($oWorkbook)
_Excel_Close($oExcel)
Sleep(2000)
ShellExecute($TemplateCopy)
Else
MsgBox(64+8192,"","Auswertung wurde abgeschlossen!")
EndIf
Alles anzeigen
Hat hier jemand von euch einen Tipp für mich? Ich bin mit meiner Weisheit echt am Ende ...
Vorab vielen Dank,
viele Grüße
TheDude
... oh ... ja, AspirinJunkie, das steht der Wert.
Danke Dir!
Andy: Mit den Structs beschäftige ich mich, wenn das Projekt soweit fertig ist. Ist auf jeden Fall interessant und ich denke, dass ich mir damit das Leben auch ein stückweit einfacher machen kann.
Nochmals vielen Dank an euch für eure Tipps und eure Geduld.
Viele Grße
TheDude
... OK, im Grunde habe ich das Thema jetzt verstanden und es klappt auch alles soweit.
Allerdings habe ich noch ein kleines Problem bei der eingangs erwähnten Funktion HINET_Get. Mit dem dritten Parameter übergebe ich eine Variable vom Typ double an die DLL. Diese Variable muss allerdings als Referenz ('double*') übergeben werden, andernfalls stürzt das Programm sofort ab.
Ich verwende hierfür jetzt folgendes:
$aReturnValue = DllCall($SteinwaldDllHdl, 'boolean', 'HINET_Get', 'long', 0, 'long', 5, 'double*', $DeviceValue, 'boolean', False)
In $DeviceValue steht nun aber leider stets eine '0', in $aReturnValue[0] eine '1' und in $aReturnValue[1] eine '0'. Im Grunde sagt mir das, dass der Aufruf der Funktion in der DLL soweit korrekt war. Aber einen Wert bekomme ich nicht geliefert. Oder muss ich noch irgendetwas mit der Variablen $DeviceValue "machen" um an den tatsächlichen Wert zu kommen?
Es gibt auch noch eine andere Funktion, die den Messwert in einen String anstatt einem Double schreibt:
$aReturnValue = DllCall($SteinwaldDllHdl, 'boolean', 'HINET_Get3', 'long', 0, 'long', 5, 'str', $DeviceValue, 'boolean', 0)
Als Rückgabewert in $aReturnValue[0] bekomme ich eine '5', was laut Dokumentation der Funktion HINET_Get3 bedeutet, dass 5 Zeichen in die Variable $DeviceValue geschrieben wurde. Lasse ich mir den Inhalt von $DeviceValue aber z. B. mit MsgBox(0, "", $DeviceValue) anzeigen, dann steht dort drin nur wieder eine '0' ...
Doku zu HINET_Get3:
Sorry, wenn ich mit dem Thema nerven sollte ...
Nochmals vielen Dank,
viele Grüße
TheDude
... OK. Also ich verstehe das nicht so richtig, aber ich bekomme jetzt meinen Wert. Die Rückgabe ist jedoch ein Array:
Global $SteinwaldDllHdl = DllOpen(@ScriptDir & "\Steinwald.DLL")
Global $ComSettings = "COM1:9600,n,8,1" ; Chr(0)
Global $Wert = DllCall($SteinwaldDllHdl,'long','HINET_Init2','str',$ComSettings) ; mit str* und 0-terminiertem String klappt es übrigens nicht
;UBound($Wert) ; = 2
;$Wert[0] = Anzahl der Kanäle
;$Wert[1] = Inhalt von $ComSettings (COM1:9600,n,8,1)
DllClose($SteinwaldDllHdl)
Aber - warum ist das so?
Viele Grüße
TheDude
Hallo Zusammen,
nochmals vielen Dank für eure Hilfe und die Tipps.
Ich stehe jetzt am Anfang der Programmierung der Schnittstelle und habe gleich zu Beginn das Problem, dass ich das erste INIT nicht hinbekomme. Nachfolgendes sagt die Doku dazu:
Ich habe jetzt nachfolgendes probiert, bekomme aber stets den Wert 0 (=Fehler) zurück:
Dim $ComSettings = "COM1:9600,n,8,1" & Chr(0)
Dim $Return = DllCall($hDLL,'long','HINET_Init2','string',$ComSettings)
MsgBox(0,"",$Return)
In der Doku steht zum Aufruf der Funktion "HINET_Init2" aus VB heraus folgendes:
ZitatDeclare Function HINET_Init2 Lib "DCH_32.DLL" (ByVal szInit As String) As Long
Kann es sein, dass ich den Wert 'string' im DllCall anders schreiben muss?
[Edit]
... wer lesen kann (im DLL-Tutorial) ist klar im Vorteil: nicht 'string' muss es heißen, sondern 'str'.
Dennoch bekomme ich da nichts brauchbares zurück außer einem leeren String (müsste aber eine 5 drin stehen). Hat jemand von euch vielleicht eine rettende Idee?
[Edit]
Vorab vielen Dank für eure Hilfe,
viele Grüße
TheDude
... eine Verständnisfrage hätte ich noch, bitte: Man kann die DLL ja mit DLLOpen öffnen und dann mit einem Handle arbeiten oder aber den Namen der DLL bei jedem Aufruf der Funktion als Parameter mitgeben. Was wäre hier die bessere Methode, bzw. wo sind hier die Vor- und Nachteile?
Nochmals vielen Dank,
viele Grüße
TheDude