Ein COM Objekt aus einer nicht registrierten DLL verwenden?

  • Hi,
    für eines meiner Scripte, benötige ich eine funktion um die Dateidetails zu ändern. Ich habe mir eine DLL von Microsoft runtergeladen in der ich die benötigten funktionen gefunden habe. Mein Problem: Es sind COM funktionen.
    Wie kann ich diese funktionen nutzen ohne die DLL zu registrieren? Geht das überhaupt?

    Ich habe mal verucht folgendes VB Script in AutoIt zu übersetzen (funktioniert nur mit registrierter DLL):

    Code
    Set oFile = CreateObject("DSOFile.OleDocumentProperties")
    oFile.Open("c:\tmp\test.txt")
    oFile.SummaryProperties.Comments = "Test Comment"
    oFile.Save
    oFile.Close

    Mein Script:

    [autoit]


    $dll = DllOpen("dsofile.dll")
    $oFile = ObjCreate("DSOFile.OleDocumentProperties")
    If Not @error Then
    MsgBox(4096, "ObjCreate Test", "ObjCreate() of a DSO File Object successful !")
    Else
    MsgBox(4096, "ObjCreate Test", "Failed to create Object. Error code: " & Hex(@error, 8))
    EndIf
    DllClose($dll)
    Exit

    [/autoit]

    Wenn ich das Script ausführe, bekomme ich den Fehlercode: 800401F3
    Das bedeutet wohl so viel wie: Objekt nicht gefunden

    Kann ich die funktion eventuell per dllcall aufrufen?

    Wenn das geht, wie mache ich das? Ich habe nicht viel Ahnung von dllcall und Objekten.

    Ich hbae mit dem DLL Export Viewer, einige für mich wichtige funktionen ausgelesen:
    Function names:

    _OleDocumentProperties::Close
    _OleDocumentProperties::CLSID
    _OleDocumentProperties::IsOleFile
    _OleDocumentProperties::Open
    _OleDocumentProperties::Save
    CustomProperties::Add
    CustomProperty::Remove
    SummaryProperties::Comments

    Weiss jemand ob und wie ich das realisieren kann?
    Muss ich die DLL tatsächlich registrieren? Wenn ja, muss die zwingend ins System32 verzeichnis?

    Einmal editiert, zuletzt von Neklor (22. März 2013 um 22:56)

  • Wieso probierst du es nicht einfach aus?

    http://www.microsoft.com/resources/docu…2.mspx?mfr=true
    regsvr32 funktioniert auch unter WIN7

  • Ja regsvr32 funktioniert natürlich, habe ich schon getestet. Ich habe es jetzt auch nochmal mit einem anderen Pfad probiert, das klappt offenbar auch. ;)
    Mich würde jetzt aber trotzdem interessieren ob ich die registrieren muss?

    Wenns nicht möglich ist, ist das OK. Ich wollte nur unnötige Arbeit vermeiden. Wenn ich das Proramm irgendwann kostenlos zur verfügung stelle, dann soll es ja auf möglichst vielen Systemen Problemlos funktionieren. Also muss ich z.B. Prüfen ob die DLL schon registriert ist, wenn nicht muss ich das durchführen mittels regsvr32. Dann braucht mein Programm aber auch Admin Rechte. Außerdem ist dann ja noch die frage welches regsvr32 ich brauche, dass aus dem syswow64 oder dem System32 ordner und wovon hängt das ab? Davon ob meine dll 64bit ist oder ob mein Programm 64bit ist?

    Naja, jedenfalls weiss ich jetzt das es funktionieren würde, weshalb ich jetzt mit dem eigentlichen Programm anfangen kann. Falls doch noch jemand weiss ob und wie es evtl. ohne regsvr geht, dann wäre ich über eine Antwort dankbar. Das erspart mir dann viel Zeit, um das ganze mit jedem Windows kompatibel zu machen ;)

  • UEZ: Ich denke, das hat er bereits auch gelesen, denn ich glaube dass Neklor hier im Forum Matrix112 im englischen Forum ist ;)
    trancexx hat uns da wohl einiges verschwiegen, was sie da in ObjCreate() eingebaut hat (3.Parameter = $hDLL ?) Schade, dass sie nicht mehr im Dev-Team ist. :(


    Ja so ist es :D
    Ich habe das bereits getestet, funktioniert anscheinend.
    Ich habe jetzt aber mit den COM Abfragen ein neues Problem, dafür habe ich aber einen neuen Thread geöffnet.