كيفية إصلاح DWMAPI.DLL الاعتماد على تأخير الحمل تحت يندوز إكس بي؟

StackOverflow https://stackoverflow.com/questions/173433

  •  05-07-2019
  •  | 
  •  

سؤال

ولقد بنيت ملف .dll تحت يندوز إكس بي الذي يدعي أنه لا يمكن العثور DWMAPI.DLL عندما يكون تحميله. والمشكلة هي أن هذا DLL هو DLL ويندوز فيستا، وهذه مشكلة معروفة لمستخدمي XP التي لديها IE7 تثبيتها. والتوصية لإلغاء IE7 أو إصلاح .NET Framework عبر إضافة / إزالة البرامج. فعلت الإصلاح، ولا شيء يتغير. أنا لست على وشك إلغاء IE7 منذ يجب أن يكون هناك حل أفضل وهذا لا يعادل "إعادة تثبيت ويندوز".

ولقد قرأت أشياء سيئة عن الناس الذين حاولوا إلغاء تثبيت IE7، لذلك أنا مترددة في السير في هذا الطريق.

وأنا باستخدام C ++ ضمن Visual ستوديو 2003 (7.1). أنا لا أرى خيار حيث أنني قد أجبر تأخير التحميل في إطلاق التطبيق. أنا فقط استخدام الإعدادات الافتراضية عندما إنشاء المشروع DLL. أنا فقط الآن تجد خيارا مثيرا للاهتمام، Linker-> الإدخال-> دلس تأخير تحميل، لذلك أضع DWMAPI.DLL هناك لإجبارها على أن تكون محملة تأخير. ومع ذلك، أحصل على هذا عند الارتباط:

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

و.. وبالطبع لم يغير شيئا عند محاولة تحميل بلدي DLL. لهيك منه، وأضفت الشجرة كلها من دلس التي تؤدي إلى DWMAPI.DLL، وأحصل على نفس الرسالة. (للسجل، انها foundation.dll-> shell32.dll-> shdocvw.dll-> mshtml.dll-> ieframe.dll-> dwmapi.dll).

لتكون أكثر تحديدا حول ما أقوم به، وأنا أكتب المساعد مايا والحصول على نص دائما مفيدة في محرر نصي:

// 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) //

ولقد استخدمت Walker التبعية لتعقب مبدئيا باستمرار المشكلة، وهذا ما يؤدي بي إلى DWMAPI.DLL. هذه هي الرسالة تعتمد يعطيني، وDWMAPI.DLL هو الشيء الوحيد الذي لديه علامة استفهام صفراء بجانبه:

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.

وجيرالد هو الصحيح. مايا هو، في الواقع، وذلك باستخدام PATH مختلفة من التبعية ووكر. بلدي المكونات في الأحمال DLL آخر (لمعالجة الصور) التي تعيش في مايا دليل المكونات الإضافية ويعتمد جدت أنه مع أي مشكلة، ولكن لم مايا لا. كان لي أن أضيف "، المكونات الإضافية". إلى PATH في Maya.env

وكما نرى لا علاقة لهذه المشكلة DWMAPI.DLL بعد كل شيء، ولكن DWMAPI هي مشكلة مشتركة، وأنا سوف الرد على أفضل الارتباط وجدت حول قضية DWMAPI على موقع الويب الخاص Novell <لأ href = "HTTP: // www.novell.com/communities/node/4372/handling-dwmapidll-dependency "يختلط =" noreferrer "> هنا . في الأساس، فإن معظم برامج يكون هذا التحذير في تبعية Depends.exe، ولكن إذا كان هناك رمز تأخير الحمل لأنها المقبل، وكنت متأكدا من أن البرنامج لن يدعو مباشرة أو غير مباشرة DWMAPI، ثم أنه بخير. المشكلة هي في مكان آخر. إذا كان رمز تأخير الحمل غير موجود، ثم لا بد من النظر في / DELAY وخيارات / DELAYLOAD في Visual Studio. حقيقة أن يعتمد أعطاني "تحذيرا" وليس "خطأ" كان لديه أدنى فكرة إلى حقيقة أن DWMAPI لا يتم تحميلها تلقائيا.

هل كانت مفيدة؟

المحلول

واستنادا إلى مشكلتك المحدثة، DWMAPI.dll ربما لا مشكلتك. والتبعية ووكر دائما تعطيك هذا الخطأ كلما كنت ربط MSHTML كما يتحقق دائما تأخير تحميل ملفات DLL.

وعند هذه النقطة أفضل تصور عندي هو أن لديك مشروعك تعيين لتحميل مكتبات وقت التشغيل بشكل حيوي ويتم تغيير مسار البحث ل DLL التي كتبها مايا. لذلك قد يكون غير قادر على العثور على وقت DLL MSVC (ق). أنا لم تتطور الإضافات المايا منذ وقت طويل، بل لقد كان لهذه المشكلة مع التطبيقات الأخرى التي لديها دلس البرنامج المساعد في الآونة الأخيرة.

وحاول تغيير الإعداد في C / C ++ -> كود Generation-> مكتبة وقت التشغيل متعدد الخيوط بدلا من متعدد الخيوط DLL

وبصرف النظر عن ذلك يمكنك محاولة تافه مع Walker التبعية لجعله استخدام نفس مسارات البحث كما مايا ومعرفة ما إذا كان يمكنك الخروج مع مشكلة تبعية أخرى.

وكملاذ أخير يمكنك اطلاق مايا في مصحح وتعيين نقطة توقف على LoadLibrary و معرفة أي مكتبة لا يتم تحميلها بهذه الطريقة.

نصائح أخرى

وهذا هو واحد صعبة. هناك حقا 2 طرق رئيسية ستحصل على هذا الخطأ.

1) لديك مجموعة مشروعك لإجبار تأخير تحميل ملفات DLL لتحميل في إطلاق التطبيق. DWMAPI.dll هو DLL محملة تأخير، وبالتالي عادة لن يتم تحميل ما لم يسمى واحد منه في وظائف. هذا لن يحدث على XP إلا إذا كنت تحاول أن تفعل ذلك في DLL الخاص بك. ولكن من الممكن لتحديد الخيار مترجم لفرض التطبيق الخاص بك لتحميل DLL تأخير تحميل على أي حال. إذا كنت تفعل ذلك، لا.

2) انها غالبا ما يكون خطأ false التي ستحصل من تبعية Depends.exe عندما يكون هناك مشكلة أخرى. تشغيل DLL الخاص بك من خلال الاعتماد على وكر ومعرفة ما إذا كان هناك أي مشاكل التبعية الأخرى. إذا فشل كل شيء آخر، حاول إلغاء تثبيت IE7 ومعرفة ما إذا استمرت المشكلة. إذا كان خطأ كاذبة، بعد تثبيت IE7 سترى الخطأ الحقيقي. يمكنك تثبيت IE7 مرة أخرى بعد ذلك.

وكان لي بالضبط هذه المشكلة.

والمشكلة متستر أن يستغرق ساعات لحلها.

وعلى أي حال. أنا جمعت طلبي تمكن C ++ على الجهاز الافراج عنهم. حصلت الشكاوى من العملاء التي لا يمكن تشغيله، يعمل مثل السحر على كل من آلات لدينا.

واتضح أن الجهاز تم إطلاق مصححة تلقائيا ليلة واحدة قبل شهر مع الإصلاح الضعف ATL، وهكذا كان كل الأجهزة الأخرى أيضا، باستثناء آلة واحدة XP.

وهذا الجهاز particulare XP لا يمكن تشغيل التطبيق سواء. تثبيت الإصلاح ATL (انظر الرابط أدناه)، وفويلا، وعمل كل شيء تماما مثل قبل.

HTTP: // شبكة الاتصالات العالمية .microsoft.com / تنزيل / details.aspx؟ familyid = 766A6AF7-EC73-40FF-B072-9112BAB119C2 وdisplaylang = أون

وهكذا تعلمت الدرس، تحقق دائما كشوف المتوسطة الخاصة بك (وجدت في التصحيح أو إطلاق الدليل)، التي سوف اقول لكم ما هو إصدار DLL أن البرنامج قد تم ربط ضده.

ونأمل أن يساعد أي شخص.

وحاول تغيير الإعداد في C / C ++ -> كود Generation-> مكتبة وقت التشغيل متعدد الخيوط بدلا من متعدد الخيوط DLL

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top