Πιθανές αιτίες για την αποτυχία καταγραφής ενός στοιχείου ελέγχου OLE

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 140346 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

OLE τα στοιχεία ελέγχου μπορεί να καταχωρηθεί με τη χρήση της Visual C++, από το μενού "Εργαλεία", από το κοντέινερ δοκιμής που παρέχονται με το στοιχείο ελέγχου Development Kit (CDK), ή χρησιμοποιώντας το regsvr ή regsvr32 εφαρμογές που παρέχονται με το Visual C++. Σε ορισμένες περιπτώσεις, ενδέχεται να αποτύχει η καταχώρηση ενός στοιχείου ελέγχου, χρησιμοποιήστε αυτό το άρθρο θα σας βοηθήσουν να αντιμετωπίσετε το πρόβλημα.

Περισσότερες πληροφορίες

Όλες τις παραπάνω μεθόδους για τη δήλωση ενός ελέγχου OLE χρησιμοποιεί ουσιαστικά την ίδια τεχνική. LoadLibrary() καλείται να φορτώσετε το στοιχείο ελέγχου στη μνήμη, ονομάζεται GetProcAddress() για να λάβετε τη διεύθυνση της συνάρτησης DllRegisterServer() και στη συνέχεια καλείται DllRegisterServer() για την καταχώρηση του στοιχείου ελέγχου.

Λόγοι γιατί ενδέχεται να αποτύχει η καταχώρηση του στοιχείου ελέγχου

  • Μία ή περισσότερες από τις απαραίτητες OLE dll δεν είναι στη διαδρομή. Οδηγίες για τη διανομή του ελέγχου OLE, καθώς και μια εξήγηση για το τι είναι απαραίτητα για την αποστολή αρχεία DLL βρίσκονται στον Shipctrl.wri το αρχείο που βρίσκεται στον ίδιο κατάλογο με το CDK.
  • Το στοιχείο ελέγχου είναι κατά τη φόρτωση του DLL από το αρχείο DLL OLE και DLL που δεν βρίσκεται στη διαδρομή. Όταν το στοιχείο ελέγχου έχει φορτωθεί στη μνήμη, επίσης φορτώνονται τα αρχεία DLL που φορτώνονται έμμεσα μέσω μιας βιβλιοθήκης εισαγωγής. Εάν κάποιο από αυτά τα αρχεία DLL δεν βρίσκονται στη διαδρομή, το στοιχείο ελέγχου δεν έχει φορτωθεί με επιτυχία, ώστε να αποτύχει η δήλωση.
  • Ένα ή περισσότερα αρχεία DLL ενδέχεται να είναι σε λάθος έκδοση. Εάν το στοιχείο ελέγχου δημιουργήθηκε με μια νεότερη έκδοση ενός αρχείου DLL από αυτήν που είναι εγκατεστημένη στον υπολογιστή, το στοιχείο ελέγχου ενδέχεται να μην φορτωθεί σωστά, ώστε να αποτύχει η δήλωση.
  • Μια παλαιότερη έκδοση του Ocd25.lib που συνδέεται με. Εάν το στοιχείο ελέγχου χρησιμοποιεί τις κλάσεις βάσης δεδομένων MFC, ίσως υπάρχει κάποιο πρόβλημα με την έκδοση του αρχείου Ocd25.lib που συνδέεται με.
  • Το στοιχείο ελέγχου OLE βρίσκεται σε απομακρυσμένη μονάδα δίσκου σε διακομιστή Novell. Σε αυτήν την περίπτωση, τα δικαιώματα πρόσβασης στο αρχείο .ocx ενδέχεται να εμποδίζουν το στοιχείο ελέγχου κατά τη φόρτωση. Βεβαιωθείτε ότι τα δικαιώματα πρόσβασης για το αρχείο .ocx έχουν ρυθμιστεί για πρόσβαση μόνο για ανάγνωση "," κοινόχρηστο, η οποία είναι η τυπική ρύθμιση για εκτελέσιμα αρχεία.

Αντιμετώπιση προβλημάτων τεχνικών

Εάν καμία από τις πιθανές αιτίες ισχύουν στην περίπτωσή σας, δοκιμάστε τις ακόλουθες τεχνικές.

  1. Με το έργο του στοιχείου ελέγχου έχει φορτωθεί σε Visual C++, ορίστε το εκτελέσιμο αρχείο για την περίοδο λειτουργίας εντοπισμού σφαλμάτων με το OLE ελέγχου Test κοντέινερ (Tstcon16.exe ή Tstcon32.exe). Όταν ξεκινάτε το κοντέινερ Δοκιμή (κάτω από το πρόγραμμα εντοπισμού σφαλμάτων), θα λάβετε μια προειδοποίηση ότι το κοντέινερ δοκιμή δεν περιέχει πληροφορίες εντοπισμού σφαλμάτων. Αγνοήστε αυτό και να συνεχίσετε.
  2. Από το κοντέινερ δοκιμή, προσπάθεια για την καταχώρηση του στοιχείου ελέγχου. Παρακολούθηση για τα δεδομένα εξόδου εντοπισμού σφαλμάτων από το αρχείο DLL OLE στοιχείου ελέγχου ή οποιοδήποτε από τα εξαρτημένα αρχεία DLL. Εάν εκτελείτε το προϊόν 16-bit, να θυμάστε να την εκτελείτε DBWIN το πρόγραμμα για να λάβετε δεδομένα εξόδου εντοπισμού σφαλμάτων.

    Για πληροφορίες σχετικά με τον τρόπο ορισμού του εκτελέσιμου αρχείου για ένα αρχείο DLL εντοπισμού σφαλμάτων σε περίοδο λειτουργίας, ανατρέξτε στο θέμα της Βοήθειας "Εντοπισμός σφαλμάτων DLL" στα ηλεκτρονικά βιβλία.
Ως εναλλακτική λύση, μπορείτε να επιχειρήσετε να καταχωρήσετε το στοιχείο ελέγχου με προγραμματισμό. Δημιουργήστε πρώτα μια εφαρμογή AppWizard MFC επιλογή εφαρμογής που βασίζεται στο παράθυρο διαλόγου και αυτοματισμού OLE. Ενεργοποίηση 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
				

Ιδιότητες

Αναγν. άρθρου: 140346 - Τελευταία αναθεώρηση: Σάββατο, 18 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
Λέξεις-κλειδιά: 
kbcode kbCtrl kbmt KB140346 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:140346
Αποποίηση ευθυνών για περιεχόμενο της Γνωσιακής Βάσης (KB) που έχει αποσυρθεί
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.

Αποστολή σχολίων

 

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