الأسباب المحتملة عن فشل تسجيل التحكم OLE

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

اضغط هنا لرابط المقالة باللغة الانجليزية140346
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الموجز
OLE عناصر التحكم يمكن تسجيل باستخدام Visual C++ من القائمة "أدوات" ، من "حاوية اختبار" المتوفرة مع التحكم تطوير Kit (للمعلمين) ، أو باستخدام التطبيقات regsvr أو regsvr32 المتوفرة مع Visual C++. في بعض الحالات، قد يفشل تسجيل أحد عناصر التحكم; تستخدم هذه المقالة للمساعدة على استكشاف المشكلة وإصلاحها.
معلومات أخرى
تستخدم كافة أساليب المُشار إليها مسبقاً من أجل تسجيل OLE التحكم نفس التقنية بشكل أساسي. يتم استدعاء LoadLibrary() لتحميل عنصر التحكم إلى الذاكرة GetProcAddress() يسمى الحصول على عنوان الدالة DllRegisterServer() و ثم استدعاء DllRegisterServer() تسجيل عنصر التحكم.

أسباب لماذا قد فشل تسجيل عنصر تحكم

  • واحد أو أكثر الضرورية OLE DLLs غير موجود في المسار. يمكن العثور على إرشادات حول توزيع عناصر تحكم OLE بالإضافة إلى شرح ما DLLs الضرورية شحن في Shipctrl.wri الملف الموجود في نفس للمعلمين الدليل.
  • يتم تحميل عنصر التحكم DLL غير مكتبة OLE و ذلك DLL غير موجود في المسار. عند تحميل عنصر التحكم في الذاكرة أيضاً يتم تحميل أي DLLs التي تم تحميلها ضمنيًا خلال إحدى المكتبات استيراد. إذا كانت أي من هذه DLLs غالباً ما غير المسار عنصر التحكم لم يتم تحميل بنجاح، حتى يفشل تسجيل.
  • قد تكون DLL واحد أو أكثر من إصدار خاطئ. إذا تم إنشاء عنصر التحكم باستخدام إصدار أحدث من DLL من واحد مثبتًا على جهاز الكمبيوتر, عنصر التحكم قد لا يتم تحميل بشكل صحيح، حتى يفشل تسجيل.
  • إصدار قديم من Ocd25.lib يتم مرتبط. إذا كان عنصر التحكم يستخدم فئات MFC قاعدة البيانات, قد يكون هناك مشكلة مع إصدار الملف Ocd25.lib مرتبطة من.
  • يتم وضع عنصر تحكم OLE على محرك الأقراص البعيد الملقم Novell. في هذه الحالة، حقوق الوصول إلى الملف .ocx قد يمنع عنصر التحكم من التحميل. تأكد من تعيين حقوق الوصول إلى الملف .ocx إلى وصول للقراءة فقط "أو" قابل للمشاركة وهو الإعداد النموذجي عن الملفات القابلة للتنفيذ.

استكشاف أخطاء الأساليب

إذا تحققت أي من الأسباب المحتملة في علبة ، حاول الأساليب التالية.

  1. مع المشروع عنصر تحكم تحميل في Visual C++ تعيين الملف التنفيذي جلسة تصحيح أخطاء إلى OLE التحكم اختبار حاوية (Tstcon16.exe أو Tstcon32.exe). عند بدء تشغيل "حاوية اختبار" (ضمن مصحح أخطاء) ، سوف تحصل على تحذير أن "حاوية اختبار" لا يحتوي على معلومات التصحيح. تجاهل هذا ثم قم بالمتابعة.
  2. من "حاوية اختبار" جرت محاولة تسجيل عنصر التحكم. مشاهدة للإخراج التصحيح من "مكتبة OLE التحكم" أو أية DLL التابعة. إذا كنت تقوم بتشغيل المنتج 16-بت تذكر لتشغيل DBWIN في البرنامج لتلقي إخراج التصحيح.

    للحصول على معلومات حول كيفية تعيين الملف القابل للتنفيذ لـ DLL debug جلسة العمل, يرجى مراجعة موضوع التعليمات "التصحيح DLLs" في المباشرة.
وكبديل لذلك، يمكنك محاولة تسجيل عنصر التحكم بطريقة برمجية. أولاً إنشاء تطبيق AppWizard MFC تحديد تطبيق يستند إلى مربع حوار "و" أتمتة OLE. سيتم تمكين أتمتة OLE إلى تهيئة OLE بحيث تعمل التعليمة البرمجية تسجيل عنصر التحكم بشكل صحيح. في فئة مشتقة CWinApp ستجد على دالة InitInstance() مع رمز الأولي كما يلي:
BOOL CTestregApp::InitInstance(){   // Initialize OLE libraries   if (!AfxOleInit())   {      AfxMessageBox(IDP_OLE_INIT_FAILED);      return FALSE;   }				
عند هذه النقطة لإضافة مقطع التعليمات البرمجية التالية مما يسمح لك بالتحقق من رموز الإرجاع من LoadLibrary() و GetProcAddress() DllRegisterServer.
#ifdef _WIN32    HINSTANCE hDLL = LoadLibrary("some.ocx");    if(NULL == hDLL)    {        // See Winerror.h for explaination of error code.        DWORD error = GetLastError();        TRACE1("LoadLibrary() Failed with: %i\n", error);        return FALSE;    }    typedef HRESULT (CALLBACK *HCRET)(void);    HCRET lpfnDllRegisterServer;    lpfnDllRegisterServer =            (HCRET)GetProcAddress(hDLL, "DllRegisterServer");    if(NULL == lpfnDllRegisterServer)    {        // See Winerror.h for explaination of error code.        DWORD error = GetLastError();        TRACE1("GetProcAddress() Failed with %i\n", error);        return FALSE;    }    if(FAILED((*lpfnDllRegisterServer)()))    {        TRACE("DLLRegisterServer() Failed");        return FALSE;    }#else // 16-bit    HINSTANCE hDLL = LoadLibrary("regtest.ocx");    if(HINSTANCE_ERROR > hDLL)    {        // See LoadLibrary() help for explaination of error code.        TRACE1("LoadLibrary() Failed with: %i\n", hDLL);        return FALSE;    }    typedef HRESULT (CALLBACK *HCRET)(void);    HCRET lpfnDllRegisterServer;    lpfnDllRegisterServer =            (HCRET)GetProcAddress(hDLL, "DllRegisterServer");    if(NULL == lpfnDllRegisterServer)    {        // See GetProcAddress() help for explaination of error code.        TRACE("GetProcAddress() Failed");        return FALSE;    }    if(FAILED((*lpfnDllRegisterServer)()))    {        TRACE("DLLRegisterServer() Failed");        return FALSE;    }#endif				
kbinf 1.51 1.52 1.52b 2.00 2.10 2.20 2.50 2.51 2.52 3.00 3.10 3.20 4.00

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 140346 - آخر مراجعة: 12/04/2015 12:29:22 - المراجعة: 2.0

Microsoft Visual C++ 1.5 Professional Edition, Microsoft Visual C++ 1.51, Microsoft Visual C++ 1.52 Professional Edition, Microsoft Visual C++ 2.0 Professional Edition, Microsoft Visual C++ 2.1, Microsoft Visual C++ 2.2, Microsoft Visual C++ 4.0 Standard Edition

  • kbnosurvey kbarchive kbmt kbcode kbctrl KB140346 KbMtar
تعليقات