Frage

Ich habe eine DLL unter WinXP gebaut, dass sie behauptet, kann dwmapi.dll nicht finden, wenn es geladen wird. Das Problem ist, dass diese DLL ist ein Vista-DLL, und dies ein bekanntes Problem für XP-Nutzer, die haben IE7 installiert. Die Empfehlung ist IE7 zu deinstallieren oder .NET Framework reparieren über Programme hinzufügen / entfernen. Ich habe die Reparatur, und nichts geändert. Ich bin nicht über IE7 deinstallieren, da muss es eine bessere Lösung sein, die nicht das Äquivalent von „Windows neu installieren“.

ist

Ich habe schlechte Dinge über Leute gelesen, die IE7 zu deinstallieren versucht, so bin ich nur ungern, diesen Weg zu gehen.

Ich bin mit C ++ unter Visual Studio 2003 (7.1). Ich habe keine Möglichkeit sehen, wo ich Verzögerung Laden beim Start der Anwendung gezwungen habe. Früher habe ich nur die Standardeinstellungen, wenn ich das DLL-Projekt erstellt. Ich habe jetzt gerade eine interessante Option finden, Linker-> Input-> Delay geladenen DLLs, so dass ich dwmapi.dll da es zu zwingen, verzögerungs geladen zu sein. Ich dies jedoch erhalten, wenn die Verknüpfung:

LINK : warning LNK4199: /DELAYLOAD:dwmapi.dll ignored; no imports found from dwmapi.dll

.. und es natürlich nicht etwas ändern, wenn ich meine DLL zu laden. Für das Heck von ihm, habe ich den ganzen Baum von DLLs, die dwmapi.dll führen, und ich bekomme die gleiche Meldung. (Für das Protokoll, es ist foundation.dll-> shell32.dll-> shdocvw.dll-> mshtml.dll-> ieframe.dll-> dwmapi.dll.)

Um genauer zu sein über das, was ich tue, ich bin eine Maya-Plugin zu schreiben und den stets hilfreich Text im Script-Editor erhalten:

// Error: Unable to dynamically load : D:/blahblahblah/mydll.mll
The specified module could not be found.
 //
// Error: The operation completed successfully.
 //
// Error: The operation completed successfully.
 (mydll) //

verwendet I Dependency Walker, um zunächst das Problem aufzuspüren, und das ist, was mich führen zu dwmapi.dll. Dies sind die Botschaft richtet gibt mir und dwmapi.dll ist das einzige, was ein gelbes Fragezeichen neben es hat:

Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.

Gerald ist richtig. Maya ist in der Tat, einen anderen Weg als die Dependency Walker verwenden. Mein Plug-in lädt eine andere DLL (für die Bildverarbeitung), die in dem Maya-Plug-ins Verzeichnis lebt und gefunden, hängt es kein Problem, aber Maya nicht. Ich musste hinzufügen "; Plug-In". Auf die PATH in Maya.env

Sehen als dieses Problem nicht, nachdem alle dwmapi.dll wurde verwendet, aber DWMAPI ist ein häufiges Problem, ich werde die beste Verbindung schreibe ich über das DWMAPI Problem auf Novell Webseite hier . Grundsätzlich werden die meisten Programme haben diese Warnung in depends.exe, aber wenn es eine Verzögerung Lastsymbol neben es ist, und Sie sind sicher, dass das Programm nicht direkt oder indirekt DWMAPI nennen, dann ist es in Ordnung. Das Problem ist anderswo. Wenn die Verzögerung Liest Symbol nicht vorhanden ist, dann muss man an der / DELAY aussehen und / delayload Optionen in Visual Studio. Die Tatsache, dass mir eine „Warnung“ und nicht ein „Fehler“ war ein Hinweis auf die Tatsache, dass depends gab DWMAPI nicht automatisch geladen wird.

War es hilfreich?

Lösung

Auf der Basis Ihres aktualisierten Problem, dwmapi.dll ist wahrscheinlich nicht Ihr Problem. Dependency Walker werden Sie immer, dass Fehler geben, wenn Sie eine Verknüpfung mshtml wie es immer Verzögerung geladen DLLs überprüft.

An diesem Punkt meine beste Vermutung ist, dass Sie Ihr Projekt dynamisch festgelegt haben, um die Laufzeitbibliotheken zu laden und der Suchpfad für DLLs wird geändert von Maya. So kann es sein, nicht in der Lage, den MSVC Laufzeit-DLL (s) zu finden. Ich habe nicht Maya-Plugins in einer langen Zeit entwickelt, aber ich habe dieses Problem mit anderen Anwendungen hatte das Plugin DLLs vor kurzem haben.

Versuchen Sie Ihre Einstellung in C Ändern / C ++ -.> Code-Generation-> Laufzeitbibliothek zu Multi-Threaded statt Multi-Threaded-DLL

Abgesehen davon, dass Sie versuchen können, mit Dependency Walker Hantieren sie die gleichen Suchpfade wie Maya zu machen und sehen, wenn Sie mit einem anderen Abhängigkeitsproblem kommen können.

Als letztes Mittel können Sie Maya starten in einem Debugger und einen Haltepunkt auf Loadlibrary und herauszufinden, welche Bibliothek wird auf diese Weise nicht geladen.

Andere Tipps

Dies ist eine schwierige Sache. Es gibt wirklich zwei wichtigsten Möglichkeiten, diese Fehlermeldung angezeigt wird.

1) Sie haben Ihr Projekt verzögert geladenen DLLs erzwingen gesetzt bei Programmstart zu laden. Dwmapi.dll ist eine verzögerungs geladenen DLL und somit normalerweise nicht geladen werden, es sei denn, eine der Funktionen es genannt wird. Das wird nicht auf XP passieren, wenn Sie versuchen, es in der DLL zu tun. Aber es ist möglich, eine Compiler-Option setzen Ihre App zu erzwingen ohnehin die Verzögerung geladen DLLs zu laden. Wenn Sie das tun, nicht.

2) Es ist oft ein falscher Fehler, die Sie von depends.exe erhalten, wenn es ein anderes Problem. Führen Sie Ihre DLL durch Dependency Walker und sehen, ob es noch andere Abhängigkeitsprobleme sind. Wenn alles andere fehlschlägt, versuchen IE7 zu deinstallieren und sehen, ob das Problem weiterhin besteht. Wenn es ein falscher Fehler ist, nachdem Sie IE7 installieren Sie den echten Fehler sehen. Sie können IE7 installieren danach wieder.

Ich hatte genau dieses Problem.

Sneaky Problem, das dauerte Stunden zu lösen.

Wie auch immer. Ich meine verwalteten C ++ Anwendung auf der Release-Maschine zusammengestellt. Haben Sie Beschwerden von Kunden, die nicht laufen konnte, arbeitete wie ein Zauber auf allen unseren Maschinen.

Es stellte sich heraus, dass die Freigabe Maschine automatisch eine Nacht mit dem ATL Verwundbarkeit fix vor einem Monat ausgebessert wurde, und so war alle anderen Maschinen auch, mit einer Ausnahme XP-Rechner.

Die particulare XP-Rechner auch nicht die Anwendung ausführen konnte. Installiert, um den ATL-Fix (siehe Link unten), und voilá, alles funktionierte wie vor.

http: // www .microsoft.com / downloads / details.aspx? FamilyID = 766A6AF7-EC73-40FF-B072-9112BAB119C2 & displaylang = en

So Lektion gelernt, immer Ihre Zwischen Manifeste überprüfen (die im Debug oder Release-Verzeichnis gefunden), das wird Ihnen sagen, welche Version der DLL, die das Programm gegen verknüpft wurden.

Hoffe, es hilft niemandem.

Versuchen Sie Ihre Einstellung in C Ändern / C ++ -.> Code-Generation-> Laufzeitbibliothek zu Multi-Threaded statt Multi-Threaded-DLL

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top