Hi,
ich habe ein Problem bei einer COM Abfrage.
Ich versuche zu einer Datei einen Kommentar hinzuzufügen, aber ich bekomme schon beim öffnen ein Problem.
Ich habe nicht sehr viel ahnung von COM, daher habe ich mich an ein VB Script gehalten und habe versucht das in AutoIt zu übersetzen.
VB Script:
Set oFile = CreateObject("DSOFile.OleDocumentProperties")
oFile.Open("c:\tmp\test.txt")
oFile.SummaryProperties.Comments = "Test Comment"
oFile.Save
oFile.Close
Mein Script:
[autoit]
Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
$oFile = ObjCreate("DSOFile.OleDocumentProperties")
If Not @error Then
;~ MsgBox(4096, "ObjCreate Test", "ObjCreate() of a DSO File Object successful !")
$oFile.Open("C:\neu.docx")
If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
$oFile.SummaryProperties.Comments = "Test Kommentar"
If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
$oFile.Save
If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
$oFile.Close
If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
Else
MsgBox(4096, "ObjCreate Test", "Failed to create Object. Error code: " & Hex(@error, 8))
EndIf
Exit
Func _ErrFunc($oError)
ConsoleWrite("err.number is: " & @TAB & $oError.number & @CRLF & _
"err.windescription:" & @TAB & $oError.windescription & @CRLF & _
"err.description is: " & @TAB & $oError.description & @CRLF & _
"err.source is: " & @TAB & $oError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
"err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
"err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
EndFunc ;==>_ErrFunc
Ich bekomme immer schon beim oFile.Open einen Fehler rausgeworfen:
err.number is: -2147352567
err.windescription: Unbekannter Fehler
err.description is:
err.source is: Dsofile.dll
err.helpfile is:
err.helpcontext is: 0
err.lastdllerror is: 0
err.scriptline is: 19
err.retcode is: -2147467259
Weiss jemand was ich falsch mache?
Hinweis: Man benötigt Dsofile.dll von Microsoft, welche dann per regsvr32 registriert werden muss. http://support.microsoft.com/kb/224351/EN-US
EDIT:
Ich habe jetzt nochmal getestet ob es eventuell an der registrierten DLL liegt und habe eine alternative Methode probiert ohne die DLL zu registrieren, führt aber zum selben fehler, also liegt es vermutlich an meinem Code.
Alternative Methode:
[autoit]
; Object identifiers
Global Const $sCLSID_OleDocumentProperties = "{58968145-CF05-4341-995F-2EE093F6ABA3}"
Global Const $IID_OleDocumentProperties = "{58968145-CF01-4341-995F-2EE093F6ABA3}"
Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
$sDll = "dsofile.dll" ; location and name of your dll
$hDll = DllOpen($sDll) ; open it
; Experimenal feature. Try with newer versions of AutoIt
$oFile = ObjCreate($sCLSID_OleDocumentProperties, $IID_OleDocumentProperties, $hDll)
If Not @error Then
;~ MsgBox(4096, "ObjCreate Test", "ObjCreate() of a DSO File Object successful !")
$oFile.Open("C:\neu.docx")
If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
$oFile.SummaryProperties.Comments = "Test Kommentar"
If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
$oFile.Save
If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
$oFile.Close
If @error Then MsgBox(48 + 262144, "COM Error", "@error is set to COM error number." & @CRLF & "@error = " & @error)
Else
MsgBox(4096, "ObjCreate Test", "Failed to create Object. Error code: " & Hex(@error, 8))
EndIf
DllClose ($hDll)
Exit
Func _ErrFunc($oError)
ConsoleWrite("err.number is: " & @TAB & $oError.number & @CRLF & _
"err.windescription:" & @TAB & $oError.windescription & @CRLF & _
"err.description is: " & @TAB & $oError.description & @CRLF & _
"err.source is: " & @TAB & $oError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
"err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
"err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
EndFunc ;==>_ErrFunc