Kann Prozess LoadLibrary verhindern ?



  • Hallo,

    ich habe einen DirectShow Filter.ax hergestellt, mit dem optische Instrumente nun auch über Dirtect -Show einsehbar sind, das funktioniert sogar unter Skype und vielen anderen Capture-Anwendungen.

    Nun kommt es das TeamViewer auch ein ImageCapture Interface hat, und der Filter
    dort geladen/angezeigt wird, in dem Moment wo der Filter.ax die Wrapper Dll zu den Geräten aufruft ist noch alles gut. Wenn diese zweite DLL nun aber das Gerätehersteller SDK (basierend auf QT) öffen möchte, via LoadLibrary
    schlägt das fehl Error 126.

    Alle Pfade sind mit ::SetDllDirectory vereinbart außerdem und zusätzlich wurden alle relevanten Pfade in der SystemVariablen Path hinterlegt. Aber es scheitert.

    Kann es sein das der Prozess Privilegien ausgeblendet hat. Man weiß nicht wieter.

    Vielen Dank für Hinweise
    Karsten.



  • Lass das mal Windows für dich regeln:-D Das weiß es 100%ig besser als du!



  • Was soll Windows für mich regeln ?



  • der Fehler 126 bedeutet ja ERROR_MOD_NOT_FOUND. Ich kenne die DLL, die du mit LoadLibrary laden willst, nicht, aber vlt. will diese ja ebenso eine statisch gelinkte DLL laden, und das klappt nicht unter dem TeamViewer, warum auch immer.



  • So sieht es aus, es gibt statische und dynamische Teile, was kann nun ausgerechnet TeamViewer tun um das Verhalten zu zeigen, und alle anderen aber nicht.

    Das ist was man nicht haben möchte. Mal versuchen mit einer weiteren Überladung
    der dll, durch einen weiteren Wrapper..



  • SetDllDirectory solltest du niemals in einer Komponente aufrufen die in fremde Prozesse geladen werden kann! Bau dir statt dessen den absoluten Pfad zusammen und übergib diesen an LoadLibrary(Ex) !

    Achromat schrieb:

    was kann nun ausgerechnet TeamViewer tun um das Verhalten zu zeigen, und alle anderen aber nicht.

    32 vs. 64 Bit?



  • Hallo,

    ja genau das war es, mit :
    ::LoadLibraryEx(sdkPath + "\" + SDKDLL, NULL, LOAD_IGNORE_CODE_AUTHZ_LEVEL | LOAD_WITH_ALTERED_SEARCH_PATH)))

    SetDllDirectory() War nun nicht mehr nötig, störte aber auch nicht.

    Danke für Dein Hinweis! Das Flag : LOAD_WITH_ALTERED_SEARCH_PATH ist nötig in diesem Zusammenhang, sehr erfreulich .

    Grüße und Erfolg.
    K. aus B.



  • Lass das mal Windows für dich regeln:-D Das weiß es 100%ig besser als du!

    Sorry, das sollte eigentlich in einen anderen Beitrag. Wollte hier niemanden verwirren


Anmelden zum Antworten