????? ????? ??? ???????? ???? DLL ?? ATL For ??????? ?? Office XP

?????? ????????? ?????? ?????????
???? ???????: 292596 - ??? ???????? ???? ????? ????? ??? ???????.
??? ????? ??? ???????. ????? "??? ??" ??? ??? ??????? ??? ????.
????? ???? | ?? ????

?? ??? ??????

??????

???????? ?????? ?? ????? ??????? ?? Office XP ???? ???? ???????? Office ?? ??????? ?? ????? ??? Office ?????????. " ???????? ?????? " ?? ???? ???? ?? ????? Office ???? ??? ?????? ??? ???? ?????? ????????? ??????? ?????? ??. ?? ???? ???? ??? ??? ??????? ?????? ???? ??? ???? ???????? ??? ??????? ??? ????? Word ?? ???? Excel. ??? ?? ?????? ??? ??? ?????? ?????????? ?? ???????? ????, ??? ????? ???????? ?? ??????? ?? ???? ?????? ??? ??? ????. ??????? ????? ???????? ?? ??? ???? ???????? ?? ????? ?? ??????? ??? ??????? ?????? ?? ?????? ????? ???? ???????? ????? ??? ??? ??????? ???.

????? ????? ???????? Office XP ??? ????? ????? ???????? ?????????? Recognizer ???????? ??????/????? (DLL) ?????? ?? ?????????? ?? ??????? Office. ??? ??????? ??? ????? ???? DLL ???????? ?????? ???????? Active Template Library (ATL) ?? ????? ?? ??????? ??????? ?????? ?? ??? Office XP ?????? ???????? DLL ???????? ?????? ?????? ??.

?????? : Excel 2002 ???? Word 2002 ??????? Office XP ??? ???? ????? " ???????? ?????? ". ??? ???? ???? ????? ????????? ???? ??? ????? ?? ??? ??????? ??? ????? " ???????? ?????? " ??? ????? ???? ????? ??????? " ???????? ?????? ". ??? DLL ???????? ?????? Component Object Model ???????? DLL (COM) ???? ???? ?????? ???? ?????: ISmartTagRecognizer ? ISmartTagAction . ????? ??????? ISmartTagRecognizer ???? ???? ??? ??????? ?? ????? ??? " ???????? ?????? ". ????? ??????? ISmartTagAction ????????? ??? ????? " ???????? ?????? " ????? ??? ??? ????????. ?? ??? ???????? ???? ???? ????? ??? ???????? ?? DLL ???. ????? ?????? ??? ???? DLL ??? ?? ???? ?? ???? ??????? DLL ???? ???? ??? " ??????? ?????? " ???? ??????? ??????.




????? ????? ??????? ?????? DLL ?? ATL


????? ??????? ??????? ????? ?????? ???????? DLL ???? ????? ???? ????? Messenger ??????? Microsoft Network (MSN) ? ???? ???????? ?????? ????? ?????? ?????????? ?? ????? ????? ??? ??? ????? ?????? ?????. ????? Messenger ??????? ???????? ??? ??????. ??? ?? ??? ???? Messenger ???????, ????? ?????? ??? ???? ?? ???? ??? MSN ??????:
http://messenger.msn.com/

  1. ?? Visual C++ ? ????? ????? AppWizard COM ATL ????. ??? ??????? MessengerSmartTag.
  2. ???? ??? ????? ???? ??????? COM ATL. ?? ???? ?????? ??????, ???? ?? ??? ?? ????? ????? ???????? ?????? ?? ???? ??? ????? . ???? ??? ????? ?????? ???????.
  3. ?????? ????? Recognizer , ?? ??????? ????? ???? ??? ???? ATL ???? . ??? ???? ???? ?? ???? ??? ?????? . ???? ?????, ???? Recognizer ????? ??? ????? .
  4. ?????? ??? ????? ? ???? ????????? ?? ?????? 3 ???? ???? ????? ????? ??????.
  5. ???? ClassView ?? ????? ???? MessengerSmartTag . ???? ??? ?????? ?????? ??? ????? CRecognizer ???? ????? Implement . ???? ??? ????? ??? ???? ???? ?????? ?????. ???? ??? ??????? ???? Microsoft Smart ???????? 1.0 Type Library . ??? ISmartTagRecognizer ?????? ISmartTagRecognizer2 ?? ???? ????? .

    ?????? : ?????? ????????? ?? ??? " ??? 1.0 Microsoft ???????? ?????? " ????? ?? C:\Program Files\Common Files\Microsoft Shared\Mstag.tlb.
  6. ?? ClassView, ???? ??? ?????? ?????? ??? ????? CAction ???? ????? Implement . ???? ??? ????? ??? ???? ???? ?????? ?????. ???? ??? ??????? ???? Microsoft Smart ???????? 1.0 Type Library . ??? ISmartTagAction ?????? ISmartTagAction2 ????? ??? ????? .
  7. ???? ????? Recognizer.h ?? ??????? ??????? ??? ???????? ???????? ???????:
    ///////////////////////////////////////////////////////////////////////////// 
    // CRecognizer
    #include "Resource.h"
    #import "C:\Program Files\Common Files\Microsoft Shared\Smart Tag\MSTAG.TLB" raw_interfaces_only, raw_native_types, no_namespace, named_guids 
    class ATL_NO_VTABLE CRecognizer : 
       public CComObjectRootEx<CComSingleThreadModel>,
       public CComCoClass<CRecognizer, &CLSID_Recognizer>,
       public IDispatchImpl<IRecognizer, &IID_IRecognizer, &LIBID_MESSENGERSMARTTAGLib>,
       public IDispatchImpl<ISmartTagRecognizer, &IID_ISmartTagRecognizer, &LIBID_SmartTagLib>,
       public IDispatchImpl<ISmartTagRecognizer2, &IID_ISmartTagRecognizer2, &LIBID_SmartTagLib>
    {
    public:
    
        CRecognizer();
        ~CRecognizer();
    
    DECLARE_REGISTRY_RESOURCEID(IDR_RECOGNIZER)
    
    DECLARE_PROTECT_FINAL_CONSTRUCT()
    
    BEGIN_COM_MAP(CRecognizer)
        COM_INTERFACE_ENTRY(IRecognizer)
    //Removed -- COM_INTERFACE_ENTRY(IDispatch)
        COM_INTERFACE_ENTRY2(IDispatch, IRecognizer)
        COM_INTERFACE_ENTRY(ISmartTagRecognizer)
        COM_INTERFACE_ENTRY(ISmartTagRecognizer2)
    END_COM_MAP()
    
    // IRecognizer
    public:
    // ISmartTagRecognizer
        STDMETHOD(get_ProgId)(BSTR * ProgId);
        STDMETHOD(get_Name)(INT LocaleID, BSTR * Name);
        STDMETHOD(get_Desc)(INT LocaleID, BSTR * Desc);
        STDMETHOD(get_SmartTagCount)(INT * Count);
        STDMETHOD(get_SmartTagName)(INT SmartTagID, BSTR * Name);
        STDMETHOD(get_SmartTagDownloadURL)(INT SmartTagID, BSTR * DownloadURL);
        STDMETHOD(Recognize)(BSTR Text, IF_TYPE DataType, INT LocaleID,
                      ISmartTagRecognizerSite * RecognizerSite);
    private:
        long lCount;
        SAFEARRAY *psa;
    // ISmartTagRecognizer2
        STDMETHOD(Recognize2)(BSTR Text, IF_TYPE DataType, INT LocaleID, ISmartTagRecognizerSite2 * RecognizerSite2, BSTR ApplicationName, ISmartTagTokenList * TokenList)
        {
            return E_NOTIMPL;
        }
        STDMETHOD(get_PropertyPage)(INT SmartTagID, INT LocaleID, VARIANT_BOOL * HasPropPage)
        {
            if (HasPropPage == NULL)
                return E_POINTER;
    		    
            return E_NOTIMPL;
        }
        STDMETHOD(DisplayPropertyPage)(INT SmartTagID, INT LocaleID)
        {
            return E_NOTIMPL;
        }
        STDMETHOD(SmartTagInitialize)(BSTR ApplicationName)
        {
            return E_NOTIMPL;
        }
    };
    					
  8. ??? ????? Recognizer.cpp ?????? ???????? ???????? ??????? ????? ?????:
    CRecognizer::CRecognizer()
    {
        Messenger::IMsgrObject2Ptr oMsgrObj = NULL;
        Messenger::IMsgrUsersPtr oUsers = NULL;
        Messenger::IMsgrUserPtr oUser = NULL;
        SAFEARRAYBOUND rgsaBound[1];
        long rgIndices[1];		
        HRESULT hr;
    		
        // Create an instance of Instant Messenger.
        oMsgrObj.CreateInstance("Messenger.MsgrObject");
        // Get the list of contacts
        oUsers = oMsgrObj->GetList(Messenger::MLIST_CONTACT);
        // Store the number of contacts you have.
        lCount = oUsers->GetCount();
        rgsaBound[0].lLbound = 0;
        rgsaBound[0].cElements = lCount;
        // Create a SAFEARRAY to hold the list of contacts.
        psa = SafeArrayCreate(VT_VARIANT, 1, rgsaBound);
        // Loop through all contacts.
        for (long l=0; l<lCount-1; l++)
        {
            rgIndices[0] = l;	
            // Set the specific user.
            oUser = oUsers->Item(l);
            // Convert the Friendly Name to lower case
            // and store it in a VARIANT.
            _variant_t v = _wcslwr(oUser->GetFriendlyName());
            // Put the VARIANT into the SAFEARRAY.
           hr = SafeArrayPutElement(psa, rgIndices, &v);
        }
    }
    
    CRecognizer::~CRecognizer()
    {
        // Destroy the SAFEARRAY.
        SafeArrayDestroy(psa);
    }
    
    
    HRESULT CRecognizer::get_ProgId(BSTR * ProgId)
    {
        // Set the ProgID of the Recognizer interface.
        *ProgId = SysAllocString(L"MessengerSmartTag.Recognizer");
        return S_OK;
    }
    
    HRESULT CRecognizer::get_Name(INT LocaleID, BSTR * Name)
    {
        // Set a short title about the recognizer.
        *Name = SysAllocString(L"Microsoft Messenger Contacts Visual C++ Recognizer");
        return S_OK;
    }
    
    HRESULT CRecognizer::get_Desc(INT LocaleID, BSTR * Desc)
    {
        // Set a long description of the recognizer.
        *Desc = SysAllocString(L"Microsoft Messenger recognizes your Instant Messenger Contacts");
        return S_OK;
    }
    
    HRESULT CRecognizer::get_SmartTagCount(INT * Count)
    {
        // Set the number of Smart Tags that are supported.
        *Count = 1;
        return S_OK;
    }
    
    HRESULT CRecognizer::get_SmartTagName(INT SmartTagID, BSTR * Name)
    {
        // This method is called the same number of times as you
        // return in SmartTagCount. This method sets a unique name
        // for the Smart Tag.
        *Name = SysAllocString(L"microsoft/messenger#contacts");
        return S_OK;
    }
    
    HRESULT CRecognizer::get_SmartTagDownloadURL(INT SmartTagID, BSTR * DownloadURL)
    {
        // Set the URL that gets embedded in documents.
        *DownloadURL = NULL;
        return S_OK;
    }
    
    HRESULT CRecognizer::Recognize(BSTR Text, IF_TYPE DataType, INT LocaleID,
           ISmartTagRecognizerSite * RecognizerSite)
    {
        // The Recognize method is called and passed a text value.
        // You should recognize strings in the text and set up the actions.
        WCHAR *pch, *strText = _wcslwr(Text);
        ISmartTagProperties  *pSmartTagProp = NULL;
        long rgIndices[1];
        HRESULT hr;
    
        // Look through all contacts
        for (long l = 0; l<lCount; l++)
        {
            rgIndices[0] = l;
    
            // Get the contact name.
            _variant_t v;
            hr = SafeArrayGetElement(psa,rgIndices,&v);
            // Convert the VARIANT to a BSTR.
            _bstr_t bstrContact = v;
            // Loop through the string looking for contacts.
            for (pch = strText; (pch = wcsstr(pch, bstrContact))!=NULL; pch++)
            {    
                // Create a new property bag.
                hr = RecognizerSite->GetNewPropertyBag(&pSmartTagProp);
                if (SUCCEEDED(hr)) {
                    // Commit the Smart Tag to the property bag.		                
                    hr = RecognizerSite->CommitSmartTag(
                          _bstr_t("microsoft/messenger#contacts"),
                          pch - strText+1, wcslen(bstrContact),
                          pSmartTagProp);
                    
                    if (pSmartTagProp != NULL)
                        pSmartTagProp->Release();
                }
            }
        }
        return S_OK;
    }
    					
  9. ???? ????? Action.h ?? ??????? ??????? ????? ???????? ???????? ???????:
    ///////////////////////////////////////////////////////////////////////////// 
    // CAction
    #include "Resource.h"
    #import "C:\Program Files\Common Files\Microsoft Shared\Smart Tag\MSTAG.TLB" raw_interfaces_only, raw_native_types, no_namespace, named_guids 
    class ATL_NO_VTABLE CAction : 
       public CComObjectRootEx<CComSingleThreadModel>,
       public CComCoClass<CAction, &CLSID_Action>,
       public IDispatchImpl<IAction, &IID_IAction, &LIBID_MESSENGERSMARTTAGLib>,
       public IDispatchImpl<ISmartTagAction, &IID_ISmartTagAction, &LIBID_SmartTagLib>,
       public IDispatchImpl<ISmartTagAction2, &IID_ISmartTagAction2, &LIBID_SmartTagLib>
    {
    public:
       CAction(){}
    
    DECLARE_REGISTRY_RESOURCEID(IDR_ACTION)
    
    DECLARE_PROTECT_FINAL_CONSTRUCT()
    
    BEGIN_COM_MAP(CAction)
        COM_INTERFACE_ENTRY(IAction)
    //Removed -- COM_INTERFACE_ENTRY(IDispatch)
        COM_INTERFACE_ENTRY2(IDispatch, IAction)
        COM_INTERFACE_ENTRY(ISmartTagAction)
        COM_INTERFACE_ENTRY(ISmartTagAction2)
    END_COM_MAP()
    
    // IAction
    public:
    // ISmartTagAction
        STDMETHOD(get_ProgId)(BSTR * ProgId);
        STDMETHOD(get_Name)(INT LocaleID, BSTR * Name);
        STDMETHOD(get_Desc)(INT LocaleID, BSTR * Desc);
        STDMETHOD(get_SmartTagCount)(INT * Count);
        STDMETHOD(get_SmartTagName)(INT SmartTagID, BSTR * Name);
        STDMETHOD(get_SmartTagCaption)(INT SmartTagID, INT LocaleID,
                      BSTR * Caption);
        STDMETHOD(get_VerbCount)(BSTR SmartTagName, INT * Count);
        STDMETHOD(get_VerbID)(BSTR SmartTagName, INT VerbIndex, INT * VerbID);
        STDMETHOD(get_VerbCaptionFromID)(INT VerbID, BSTR ApplicationName,
                      INT LocaleID, BSTR * Caption);
        STDMETHOD(get_VerbNameFromID)(INT VerbID, BSTR * Name);
        STDMETHOD(InvokeVerb)(INT VerbID, BSTR ApplicationName,
                      IDispatch * Target, ISmartTagProperties * Properties,
                      BSTR Text, BSTR Xml);
    // ISmartTagAction2
        STDMETHOD(get_VerbCaptionFromID2)(INT VerbID, BSTR ApplicationName, INT LocaleID, ISmartTagProperties * Properties, BSTR Text, BSTR Xml, IDispatch * Target, BSTR * Caption)
        {
            if (Caption == NULL)
                return E_POINTER;
    
            return E_NOTIMPL;
        }
        STDMETHOD(InvokeVerb2)(INT VerbID, BSTR ApplicationName, IDispatch * Target, ISmartTagProperties * Properties, BSTR Text, BSTR Xml, INT LocaleID)
        {
            return E_NOTIMPL;
        }
        STDMETHOD(get_IsCaptionDynamic)(INT VerbID, BSTR ApplicationName, INT LocaleID, VARIANT_BOOL * Dynamic)
        {
            if (Dynamic == NULL)
                return E_POINTER;
    
            return E_NOTIMPL;
        }
        STDMETHOD(get_ShowSmartTagIndicator)(INT VerbID, BSTR ApplicationName, INT LocaleID, VARIANT_BOOL * Visible)
        {
            if (Visible == NULL)
                return E_POINTER;
    
            return E_NOTIMPL;
        }
        STDMETHOD(SmartTagInitialize)(BSTR ApplicationName)
        {
            return E_NOTIMPL;
        }
    };
    					
  10. ??? ????? Action.cpp ?????? ???????? ???????? ??????? ??? ????? ?????:
    HRESULT CAction::get_ProgId(BSTR * ProgId)
    {
       // Set the ProgID of the Action interface.
       *ProgId = SysAllocString(L"MessengerSmartTag.Action");
       return S_OK;
    }
    
    HRESULT CAction::get_Name(INT LocaleID, BSTR * Name)
    {
       // Set a short name describing the Action.
       *Name = SysAllocString(L"Messenger Smart Tag");
       return S_OK;
    }
    
    HRESULT CAction::get_Desc(INT LocaleID, BSTR * Desc)
    {
       // Set a long description describing the action.
       *Desc = SysAllocString(L"Provides actions for the Messenger Smart Tag");
       return S_OK;
    }
    
    HRESULT CAction::get_SmartTagCount(INT * Count)
    {
        // Set the number of smart tags this action supports.
        *Count = 1;
        return S_OK;
    }
    
    HRESULT CAction::get_SmartTagName(INT SmartTagID, BSTR * Name)
    {
        // This method is called the same number of times as you
        // return in SmartTagCount. This method sets a unique name
        // for the smart tag.
        *Name = SysAllocString(L"microsoft/messenger#contacts");
        return S_OK;
    }
    
    HRESULT CAction::get_SmartTagCaption(INT SmartTagID, INT LocaleID, BSTR * Caption)
    {
        // This caption is displayed on the menu for the smart tag.
        *Caption = SysAllocString(L"Messenger Smart Tag");
        return S_OK;
    }
    
    HRESULT CAction::get_VerbCount(BSTR SmartTagName, INT * Count)
    {
        // Return the number of verbs we support.
        if (wcsstr(SmartTagName,L"microsoft/messenger#contacts") != 0) {
            *Count = 2;
        }
        return S_OK;
    }
    
    HRESULT CAction::get_VerbID(BSTR SmartTagName, INT VerbIndex, INT * VerbID)
    {
        // Return a unique ID for each verb we support.
        *VerbID = VerbIndex;
        return S_OK;
    }
    
    HRESULT CAction::get_VerbCaptionFromID(INT VerbID, BSTR ApplicationName,
                         INT LocaleID, BSTR * Caption)
    {
        // Set a caption for each verb. This caption is displayed
        // on the Smart Tag menu.
        switch (VerbID) {
          case 1:
            *Caption = SysAllocString(L"Send this contact an Instant Message");
            break;
          case 2:
            *Caption = SysAllocString(L"Send email to this contact");
            break;
          default:
            *Caption = NULL;
            break;
        }
        return S_OK;
    }
    
    HRESULT CAction::get_VerbNameFromID(INT VerbID, BSTR * Name)
    {
        // Set a string name for each verb.
        switch (VerbID) {
          case 1:
            *Name = SysAllocString(L"SendInstantMessage");
            break;
          case 2:
            *Name = SysAllocString(L"SendEmail");
            break;
        }
        return S_OK;
    }
    HRESULT CAction::InvokeVerb(INT VerbID, BSTR ApplicationName,
          IDispatch * Target, ISmartTagProperties * Properties,
          BSTR Text, BSTR Xml)
    {
        // This method is called when a user invokes a verb
        // from the Smart Tag menu.
        Messenger::IMessengerApp2Ptr oMessenger = NULL;
        Messenger::IMsgrObject2Ptr oMsgrObj = NULL;
        Messenger::IMsgrUsersPtr oUsers = NULL;
        Messenger::IMsgrUserPtr oUser = NULL;
        _variant_t v;		
    
        // Create an instance of Instant Messenger.
        oMessenger.CreateInstance("Messenger.MessengerApp");
        oMsgrObj.CreateInstance("Messenger.MsgrObject");
        // Get a list of contacts.
        oUsers = oMsgrObj->GetList(Messenger::MLIST_CONTACT);
        // Loop through all contacts.
        for (long l=0; l<(oUsers->GetCount()-1); l++)
        {
            // Get a specific contact.
            oUser = oUsers->Item(l);
            // Check to see if the contact is the correct one.
    	if (wcscmp(_wcslwr(oUser->GetFriendlyName()),_wcslwr(Text)) == 0)
            {
                switch (VerbID) {
                  case 1:
                    // The user wants to display the Instant Message
                    // box to send the contact a message.
                    v = oUser.GetInterfacePtr();					
                    oMessenger->LaunchIMUI(v);
                    break;
                  case 2:
                    // Shell the "mailto" protocol to start the
                    // user's mail program and create a new message.
                    _bstr_t bstrTemp = "mailto:";
                    bstrTemp += oUser->GetEmailAddress();				                
                    ShellExecute(0,"open",bstrTemp,NULL,NULL,1);
                    break;
                }
            }
        }
        return S_OK;
    }
    					
  11. ??? ????? Stdafx.h ?????? ????? ?????? ??? ????? ???? ???? # ????? <atlcom.h>:
    #import "C:\Program Files\Messenger\msmsgs.exe"
    						
    NOTE : ????? ???? ????? Msmsgs.exe ??? ???? ??????? ?? Messenger ???????. ?????? ????????? ?? Messenger ??????? ?? C:\Program Files\Messenger.
  12. ???? ??????? F7 ?????? DLL.




????? ????? ??????? ?????? DLL



??? ?? ????? ?? ??????? ?? DLL ???????? ??????, ??? ????? ???? ??? ??????. ????? COM ???? ??? ????? ??? ??? ????? ??????? ?? ??????? Regsvr32.exe ?? ??? DLL. ??? ???? ????? ??????? ??????? ???????? ???? ???? ??? ?? ??????? COM ?????? ???? ???? ????? ??????? Office DLL ?? DLL ???????? ??????. ?????? ????? ???? ??????? ???????:
  1. ?? ??? ???????, ??? Regedit.exe.
  2. ??? Tag\Actions HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Smart , ????? ????? ???? ???? ???? MessengerSmartTag.Action.
  3. ??? Tag\Recognizers HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Smart , ????? ????? ???? ???? ???? MessengerSmartTag.Recognize.
  4. ???? ???? ???????.




????? ?????? ??????? ?????? DLL



???????? ?????? obey ???? ?????? ????? ??? ????? ???????. ??? ?? ????? ??????? ?????? ?????? ??????? ??? ?????, ?? ??? ????? DLL ???????? ?????? ??? ??? DLL ?? ?????? (??? ????? ?????? ?? ????? ??????? VBA). ????? ?? ????????? ??? ????? ????, ???? ?????? "References".

??????? DLL Recognizer/????? ???? ???????? ?????? ?? Word, ???? ??????? ???????:
  1. ??? ????? Messenger ??????? ?????? ??????.

    ?????? : ????? " ???????? ?????? " ????? ?? ????? ?????? ??? Messenger ???????; ??? ??? ???? ?? ?????? ?????? ??? " ??????? Messenger? " DLL ????? ????? ???? ?? ????? ??? ??? ???? ?????.
  2. ??? ????? Word 2002. ?? ??????? ?????? ??? ??? ????? ?? ???? ??? ?????? . ????? ???? ??????? ??? ????? ?? ???? ??? ????? . ??? ?? ????? ????? ???? ??????? ??? ????? ??????, ????? ????? Word.
  3. ???? ????? ??????? ?? ??? ????? ?? ????? ???? (??? ???? ??????? ???? ????) ?? ???? ENTER. ???? ?? ????? ??? ????? ??????? ??????? ?? ???? ??? ?????? ??? ???? " ???????? ?????? ". ??? ?????? ??? ????? ??????? ????? ???? " ????? ??????? ?????? ".
  4. ???? ??? ????? ??????? ?????? ?? ??? ??? ??????? ??????? ?????? ?? ??????? ????????. ????? ????? ?????? ?????????? ?? ????? ????? ??? ??? ??????? ?? ??????? ??????.
????? ??????? ????? ?????? ??????? DLL ???????? ?????? ?? Excel 2002.





??????? ??????? ????????



??? ??? ???? ????? ?????? ??? " ???????? ?????? " ??????? ?????? ?? ?????, ???? ????? ?? ?? ??? ????? DLL ???????? ?????? ???????. ?? Word ?? Excel? ?? ??????? ????? ? ???? ??? ?????? ????? ?????? , ???? ??? ????? ??????? ????? ???? ?? ?????? ?? ??? ?? ????? ????? ???? ???????? " ???????? ?????? " ??? ?? ???? DLL ???????? ?????? ??? ???? ?????. ??? ?? ??? ??????? " ??????? ?????? " ?????? ??, ???? ?? ?? ??? ???? ???? ?????.

????? ????? ???? ?? ??????? ?????? ???? ???? ??????? ? ???? ???? ????? DLL ???????? ?????? ??? ???? ??? DLL Visual C++. ????? ???? ???? ?? ?????? ????? Recognizer. ??? ??? F5 ????? ???????, ???? ???? ???? ????? ???? ???????? ????? ???????. ??? ??? Winword.exe ?? Excel.exe . ??? Excel ?? Word ???? ?? ????? " ??????? ?????? " ????? ????????? ???????? ??? ???? ????? ??????? ?? ???? ???? ????? ???? ????????? ???????? ?? ??? ???????.



REFERENCES


??? ????? ????? ??? ????????, ?? ????? ??????? ???????? ????? ???? ?? ?????? ???????? Software Development Kit (SDK). ?? ???? ?? ?????? ?? ????, ??? ????? SDK ???????? ?????? ??? ???????? ?? ??????? ?????? ?????? " ???????? ?????? ". ????? ?????? ??? SDK ???????? ?????? ?? Microsoft Office XP Developer (MOD) ????????, ?? ????? ???? ?? ???? ??? Microsoft Developer Network (MSDN) ???????:
?????? ???????? Software Development Kit
http://www.microsoft.com/downloads/details.aspx?familyid=3d8edcee-0246-43ef-a70f-94c0899f1e8f&displaylang=en



????? ?? ????????? ??? ????? ???? DLLs Recognizer/????? ???????? ??????, ???? ?? ??? Development ???????? ?????? ??????? ???? ?? ?????? ?? SDK ???????? ??????.

?????? ??? ??????? ?????? ??? ???????? ???????, ???? ??? ??? ??????? ????? ???? ??????? ?? ????? ????? Microsoft:
247257 ????? INFO: ?? ??? ????? .cab ??? ???
?????? ??? ??????? ??? ??????? CLSIDs ????? DLL ???????? ?????? ????? ?? ProgIDs, ???? ????? ??????? ?? Microsoft Knowledge Base:
294422 BUG: ????? ???? ??? Updated ??? ????? ????? ?? ????? ???????? ??????




???????

???? ???????: 292596 - ????? ??? ??????: 28/???? ??????/1435 - ??????: 10.1
????? ???
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Word 2002 Standard Edition
  • Microsoft Visual C++ 6.0 Professional Edition
????? ??????: 
kbnosurvey kbarchive kbmt kbhowto kbhowtomaster KB292596 KbMtar
????? ????
???: ??? ????? ??? ?????? ???????? ?????? ????? ???? ????? ?????????? ????? ?? ????????? ?????? ????. ???? ???? ?????????? ???? ?? ???????? ???????? ?????? ????????? ????? ????????? ???????? ????? ???????? ?????? ?? ?????? ??? ?? ???????? ???????? ?? ????? ??????? ?????? ??? ??????? ?????? ??. ?????? ?? ???? ??? ??????? ???????? ????? ?? ???? ????? ?????? ??? ????? ??? ????? ??????? ?? ????? ?? ?????? ??? ??? ??????? ??????? ?? ????? ????? ????? ????? ?????. ?? ????? ???? ?????????? ??????? ??? ????? ?? ??????? ?? ????? ?????? ?? ??? ????? ?? ????? ??????? ?? ???????? ?? ??? ???????. ???? ???? ?????????? ???????? ??? ????? ?????? ??????? ??????. ??? ?? ???? ??? ??????? ????? ?? ???????? ?? ??? ???????? ?????? ????? ????????? ??????? ???? ??? ???????
???? ??? ????? ??????? ?????? ??????????292596

????? ???????

 

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