สาเหตุที่เป็นไปได้สำหรับการลงทะเบียนของคอนโทรล OLE ไม่สำเร็จ

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 140346 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

ole ควบคุมสามารถลงทะเบียน โดยใช้ c ++ Visual จากเมนูเครื่องมือ จากทดสอบคอนเทนเนอร์ที่จัดให้มีการควบคุมการพัฒนา Kit (CDK), หรือ โดยใช้ใบ regsvr หรือ regsvr32 สมัครที่ให้มาพร้อมกับ c ++แสดงผล ในบางกรณี ลงทะเบียนคอนโทรลอาจล้มเหลว ใช้บทความนี้เพื่อช่วยแก้ไขปัญหา

ข้อมูลเพิ่มเติม

วิธีการที่ระบุไว้ก่อนหน้านี้สำหรับการลงทะเบียนการ OLE ควบคุมทั้งหมดใช้ essentially เทคนิคเหมือนกัน เรียกว่า LoadLibrary() โหลดตัวควบคุมลงในหน่วยความจำ GetProcAddress() เรียกว่าการรับอยู่ของฟังก์ชัน DllRegisterServer() แล้ว DllRegisterServer() เรียกว่าการลงทะเบียนตัวควบคุม

เหตุผลที่ทำไมการลงทะเบียนตัวควบคุมอาจล้มเหลว

  • อย่างน้อยหนึ่งอย่างจำเป็น OLE DLLs ไม่อยู่ในเส้นทาง สามารถพบคำแนะนำสำหรับการกระจาย OLE ควบคุมรวมทั้งคำอธิบายเกี่ยวกับสิ่ง DLLs จะจำเป็นในการจัดส่งใน Shipctrl.wri แฟ้มที่อยู่ในไดเรกทอรีเดียวกันเป็น CDK นั้นได้
  • ตัวควบคุมถูกโหลด DLL ที่อื่นที่ไม่ใช่ OLE DLL และ DLL ที่ไม่ได้อยู่ในเส้นทาง เมื่อตัวควบคุมที่โหลดเข้าในหน่วยความจำ DLLs ใด ๆ ที่มีการโหลด implicitly ถึงไลบรารีการนำเข้าได้นอกจากนี้ยังโหลด หากการ DLLs เหล่านี้ไม่ในเส้นทาง ตัวควบคุมจะไม่โหลดเสร็จเรียบร้อยแล้ว เพื่อลงทะเบียนล้มเหลว
  • DLLs อย่าง น้อยหนึ่งอาจมีรุ่นที่ไม่ถูกต้อง ถ้าตัวควบคุมถูกสร้าง ด้วยรุ่นที่ใหม่กว่าใน DLL ติดตั้งบนคอมพิวเตอร์ที่ไม่ใช่ ตัวควบคุมอาจไม่โหลดอย่างถูกต้อง เพื่อทำการลงทะเบียนล้มเหลว
  • Ocd25.lib รุ่นเก่าจะถูกลิงค์ไป ถ้าตัวควบคุมนั้นใช้คลาสที่ MFC ฐานข้อมูล อาจมีปัญหากับรุ่นของแฟ้ม Ocd25.lib ที่ถูกลิงค์ไป
  • ตัวควบคุม OLE ที่อยู่บนไดรฟ์ที่ระยะไกลของเซิร์ฟเวอร์ Novell ในกรณีนี้ สิทธิการเข้าถึงไปยังแฟ้ม.ocx อาจจะป้องกันตัวควบคุมในการโหลด ตรวจสอบให้แน่ใจว่า สิทธิ์การเข้าถึงแฟ้ม.ocx ถูกกำหนดเป็นแบบอ่านอย่างเดียว shareable เข้า ซึ่งก็คือการตั้งค่าทั่วไปสำหรับแฟ้มที่ปฏิบัติการได้

เทคนิคในการแก้ไขปัญหา

หากไม่มีสาเหตุที่น่าจะเป็นจริงในกรณีของคุณ ลองเทคนิคต่าง ๆ ต่อไปนี้

  1. มีโครงการตัวควบคุมที่โหลดใน c ++ Visual เซ็ตปฏิบัติการสำหรับเซสชันการตรวจแก้จุดบกพร่องเพื่อการ OLE ควบคุมทดสอบคอนเทนเนอร์ (Tstcon16.exe หรือ Tstcon32.exe) เมื่อคุณเริ่มคอนเทนเนอร์ทดสอบ (ภายใต้ดีบักเกอร์), คุณจะได้รับข้อความแสดงคำเตือนว่า คอนเทนเนอร์ทดสอบไม่ประกอบด้วยข้อมูลการตรวจแก้จุดบกพร่อง ละเว้นนี้ และดำเนินต่อ
  2. จากคอนเทนเนอร์ทดสอบ พยายามที่จะลงทะเบียนตัวควบคุม ดูสำหรับผลลัพธ์การตรวจแก้จุดบกพร่องจาก OLE ควบคุม DLL หรือใด ๆ ของ DLLs ขึ้น ถ้าคุณกำลังใช้ผลิตภัณฑ์ 16 บิต ลืมที่จะเรียกใช้ DBWIN โปรแกรมได้รับผลลัพธ์การตรวจแก้จุดบกพร่อง

    สำหรับข้อมูลเกี่ยวกับวิธีการตั้งค่าการปฏิบัติการสำหรับ DLL ในเซสชันที่ตรวจแก้จุดบกพร่อง โปรดดูหัวข้อวิธีใช้ "แก้จุดบกพร่อง DLLs" ในสมุดบัญชีออนไลน์
เป็นแทน คุณสามารถพยายามที่จะลงทะเบียนการควบคุมโดยทางโปรแกรม สร้างโปรแกรมประยุกต์ AppWizard MFC เลือกโปรแกรมประยุกต์ที่ใช้กล่องโต้ตอบและ OLE Automation ก่อน เริ่มการเปิดใช้งาน OLE Automation จะต้น 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
				

คุณสมบัติ

หมายเลขบทความ (Article ID): 140346 - รีวิวครั้งสุดท้าย: 6 มกราคม 2554 - Revision: 2.0
ใช้กับ
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
Keywords: 
kbcode kbctrl kbmt KB140346 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:140346
การปฏิเสธความรับผิดชอบในเนื้อหาของ KB ที่จะไม่มีการปรับปรุงอีกต่อไป
บทความนี้กล่าวถึงผลิตภัณฑ์ที่ Microsoft ไม่มีการสนับสนุนอีกต่อไป เนื้อหาของบทความจึงมีการนำเสนอ "ตามลักษณะที่เป็น" และจะไม่มีการปรับปรุงข้อมูลอีก

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com