Τρόπος λήψης του IDispatch ενός εγγράφου Excel ή το Word από μια OCX

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

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

Περίληψη

Είναι συνηθισμένο για ένα στοιχείο ελέγχου OLE να χρειάζεται το IDispatch του κοντέινερ. Συχνά, μπορείτε να πάρετε το IDispatch χρησιμοποιώντας QueryInterface() από διασυνδέσεις άμεση πρόσβαση στο διακομιστή, όπως IOleClientSite. Ωστόσο, ορισμένοι διακομιστές, όπως το Microsoft Excel, η προσέγγιση αυτή αποτυγχάνει.

Ένας άλλος τρόπος για να πάρετε το IDispatch είναι με τη χρήση του API GetActiveObject() λήψη IDispatch του διακομιστή από το ROT. Ωστόσο, αυτή η μέθοδος απαιτεί ότι πρέπει να μπορείτε να αποκτήσετε το CLSID ή το ProgID του διακομιστή. Επιπλέον, Ασαφής περιπτώσεις μπορεί να προκύψει, όπου δεν είναι δυνατό να ξεχωρίσετε πολλές παρουσίες του διακομιστή.

Αυτό το άρθρο χρησιμοποιεί μια άλλη προσέγγιση για να αποκτήσετε το IDispatch, που λειτουργεί με Microsoft Excel και το Microsoft Word, ακόμη και όταν εκτελούνται πολλές παρουσίες.

Τα βήματα που παρατίθενται παρακάτω σάς επιτρέπουν να δημιουργήσετε ένα στοιχείο ελέγχου που μπορεί να λάβει το IDispatch του αντικειμένου εγγράφου του κοντέινερ.

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

Παράδειγμα βήμα με βήμα

  1. Δημιουργία μιας νέας εφαρμογής MFC ActiveX ControlWizard που ονομάζεται OffCntrDisp.
  2. Προσθέστε τις ακόλουθες μεταβλητές μελών κλάση προερχόμενη COleControl σας:
          char m_szDocName[512];
          IDispatch *m_pDocDisp;
    					
    ΣΗΜΕΙΩΣΗ: m_szDocName διατηρεί το όνομα του εγγράφου που περιέχει το στοιχείο ελέγχου μας και m_pDocDisp είναι της διασύνδεσης IDispatch για αυτό το έγγραφο.

  3. Προσθέστε τα ακόλουθα στο τέλος του τον ορισμό κλάσης που προέρχεται από το COleControl:
          // Interface Maps.
          protected:
             // IoleObject.
             BEGIN_INTERFACE_PART(MyOleObject, IOleObject)
                INIT_INTERFACE_PART(COffCtlDispCtrl, MyOleObject)
                STDMETHOD(SetClientSite)(LPOLECLIENTSITE);
                STDMETHOD(GetClientSite)(LPOLECLIENTSITE*);
                STDMETHOD(SetHostNames)(LPCOLESTR, LPCOLESTR);
                STDMETHOD(Close)(DWORD);
                STDMETHOD(SetMoniker)(DWORD, LPMONIKER);
                STDMETHOD(GetMoniker)(DWORD, DWORD, LPMONIKER*);
                STDMETHOD(InitFromData)(LPDATAOBJECT, BOOL, DWORD);
                STDMETHOD(GetClipboardData)(DWORD, LPDATAOBJECT*);
                STDMETHOD(DoVerb)(LONG, LPMSG, LPOLECLIENTSITE, LONG, HWND,
                LPCRECT);
                STDMETHOD(EnumVerbs)(IEnumOLEVERB**);
                STDMETHOD(Update)();
                STDMETHOD(IsUpToDate)();
                STDMETHOD(GetUserClassID)(CLSID*);
                STDMETHOD(GetUserType)(DWORD, LPOLESTR*);
                STDMETHOD(SetExtent)(DWORD, LPSIZEL);
                STDMETHOD(GetExtent)(DWORD, LPSIZEL);
                STDMETHOD(Advise)(LPADVISESINK, LPDWORD);
                STDMETHOD(Unadvise)(DWORD);
                STDMETHOD(EnumAdvise)(LPENUMSTATDATA*);
                STDMETHOD(GetMiscStatus)(DWORD, LPDWORD);
                STDMETHOD(SetColorScheme)(LPLOGPALETTE);
            END_INTERFACE_PART(MyOleObject)
    
            DECLARE_INTERFACE_MAP();
    					
    Προστίθεται για παράκαμψη του COleControl προεπιλογή υλοποίηση του IOleObject με την προσαρμοσμένη MyOleObject.

  4. Στην κατασκευή σας προέρχεται COleControl κλάσης του, προσθέστε τα εξής:
          m_pDocDisp = NULL;
  5. Μετά από την ακόλουθη γραμμή στο OffCntrDispCtl.cpp:
          IMPLEMENT_OLECTLTYPE(COffCntrDispCtrl, IDS_OFFCNTRDISP,
    
           _dwOffCntrDispOleMisc)
    					
    Προσθέστε τον ακόλουθο κώδικα:
          BEGIN_INTERFACE_MAP(COffCntrDispCtrl, COleControl)
              INTERFACE_PART(COffCntrDispCtrl, IID_IOleObject, MyOleObject)
          END_INTERFACE_MAP()
    					
    Αυτό, μαζί με τις τροποποιήσεις στο βήμα 3, παράκαμψη του COleControl IOleObject.

  6. Κάτω από τον κώδικα που προσθέσατε στο βήμα 5, προσθέστε τα εξής:
          static char buf[8192];
          static void DoMsg(char *msg) {
             ::MessageBox(NULL, msg, "Message", MB_SETFOREGROUND);
          }
    
          static void DoErr(char *msg, long err) {
             static char errBuf[8192];
             sprintf(errBuf, "%s, Error: %ld (%08lx)", msg, err,err);
             ::MessageBox(NULL, errBuf, "Error", MB_SETFOREGROUND);
          }
    					
    Αυτές είναι χρήσιμες ρουτίνες χρησιμοποιηθεί αργότερα για την εμφάνιση των μηνυμάτων.

  7. Επικολλήστε τον ακόλουθο κώδικα στο τέλος του OffCntrDispCtl.cpp όλα αρχείου:
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::SetHostNames(LPCOLESTR
          pwApp, LPCOLESTR pwObj)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
    
              // Convert OLESTR into ASCII string.
    
              WideCharToMultiByte(CP_ACP, 0, pwObj, -1, pThis->m_szDocName,
              512, NULL, NULL);
    
              // Get IDispatch.
              pThis->GetDocDispatch();
    
              // Test it out by getting the document name.
              pThis->TestDispatch();
    
              return S_OK;
          }
    
          STDMETHODIMP
          COffCntrDispCtrl::XMyOleObject::SetClientSite(LPOLECLIENTSITE
          pClientSite)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.SetClientSite(pClientSite);
          }
    
          STDMETHODIMP
          COffCntrDispCtrl::XMyOleObject::SetColorScheme(LPLOGPALETTE plp)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.SetColorScheme(plp);
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::GetMiscStatus(DWORD
          dwAspect, DWORD* pdwStatus)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.GetMiscStatus(dwAspect, pdwStatus);
          }
    
          STDMETHODIMP
          COffCntrDispCtrl::XMyOleObject::EnumAdvise(LPENUMSTATDATA*
          ppenumAdvise)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.EnumAdvise(ppenumAdvise);
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::Unadvise(DWORD
          dwConnection)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.Unadvise(dwConnection);
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::Advise(LPADVISESINK
          pAdvSink, DWORD* pdwConnection)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.Advise(pAdvSink, pdwConnection);
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::GetExtent(DWORD
          dwDrawAspect, LPSIZEL lpsizel)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.GetExtent(dwDrawAspect, lpsizel);
          }
    
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::SetExtent(DWORD
          dwDrawAspect, LPSIZEL lpsizel)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.SetExtent(dwDrawAspect, lpsizel);
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::GetUserType(DWORD
          dwFormOfType, LPOLESTR* ppszUserType)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
    
              return pThis->m_xOleObject.GetUserType(dwFormOfType,
              ppszUserType);
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::GetUserClassID(CLSID*
          pClsid)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.GetUserClassID(pClsid);
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::IsUpToDate()
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
    
              return pThis->m_xOleObject.IsUpToDate();
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::Update()
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.Update();
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::EnumVerbs(LPENUMOLEVERB*
          ppenumOleVerb)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
    
              return pThis->m_xOleObject.EnumVerbs(ppenumOleVerb);
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::DoVerb(LONG iVerb, LPMSG
          lpmsg, LPOLECLIENTSITE pActiveSite, LONG lindex, HWND hwndParent,
          LPCRECT lprcPosRect)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.DoVerb(iVerb, lpmsg, pActiveSite,
              lindex, hwndParent, lprcPosRect);
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::GetClipboardData(DWORD
          dwReserved, LPDATAOBJECT *ppDataObject)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.GetClipboardData(dwReserved,
              ppDataObject);
          }
    
          STDMETHODIMP
          COffCntrDispCtrl::XMyOleObject::InitFromData(LPDATAOBJECT
          pDataObject, BOOL fCreation, DWORD dwReserved)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.InitFromData(pDataObject, fCreation,
              dwReserved);
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::GetMoniker(DWORD
          dwAssign, DWORD dwWhichMoniker, LPMONIKER *ppmk)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.GetMoniker(dwAssign, dwWhichMoniker,
              ppmk);
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::SetMoniker(DWORD
          dwWhichMoniker, LPMONIKER pmk)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.SetMoniker(dwWhichMoniker, pmk);
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::Close(DWORD
          dwSaveOption)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.Close(dwSaveOption);
          }
    
          STDMETHODIMP
          COffCntrDispCtrl::XMyOleObject::GetClientSite(LPOLECLIENTSITE*
          ppClientSite)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.GetClientSite(ppClientSite);
    
          }
    
          STDMETHODIMP_(ULONG) COffCntrDispCtrl::XMyOleObject::Release()
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.Release();
          }
    
          STDMETHODIMP_(ULONG) COffCntrDispCtrl::XMyOleObject::AddRef()
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.AddRef();
          }
    
          STDMETHODIMP COffCntrDispCtrl::XMyOleObject::QueryInterface(REFIID
          iid, LPVOID* ppvObj)
          {
              METHOD_MANAGE_STATE(COffCntrDispCtrl, MyOleObject)
              ASSERT_VALID(pThis);
              return pThis->m_xOleObject.QueryInterface(iid, ppvObj);
          }
    					
    Πρόκειται για την υλοποίηση του IOleObject, το οποίο συνήθως αναθέτει όλες τις κλήσεις προς την προεπιλογή του COleControl IOleObject υλοποίησης, εκτός για SetHostNames(). Παγίδευση SetHostNames() και αποθηκεύει το όνομα του εγγράφου όπου εισάγεται το στοιχείο ελέγχου.

    Δυστυχώς, το Microsoft PowerPoint δεν κλήση αυτής της μεθόδου, έτσι ώστε αυτό το παράδειγμα δεν θα λειτουργήσει με αυτό το προϊόν. Ωστόσο, το Microsoft PowerPoint είναι ένας διακομιστής μίας μόνο παρουσίας, έτσι, θα μπορούσατε να χρησιμοποιήσετε GetActiveObject() λήψη με μοναδικό τρόπο το δείκτη IDispatch.
  8. Προσθέστε τις ακόλουθες συναρτήσεις μέλος κλάση προερχόμενη COleControl σας:
          void COffCntrDispCtrl::GetDocDispatch()
          {
              // No need, if we already have it.
              if(m_pDocDisp != NULL) return;
    
              // Get a BindCtx.
              IBindCtx *pbc;
              HRESULT hr = CreateBindCtx(0, &pbc);
              if(FAILED(hr)) {
                  DoErr("CreateBindCtx()", hr);
                  return;
              }
    
              // Get running-object table.
              IRunningObjectTable *prot;
              hr = pbc->GetRunningObjectTable(&prot);
              if(FAILED(hr)) {
                  DoErr("GetRunningObjectTable()", hr);
                  pbc->Release();
                  return;
              }
    
              // Get enumeration interface.
              IEnumMoniker *pem;
              hr = prot->EnumRunning(&pem);
              if(FAILED(hr)) {
                  DoErr("EnumRunning()", hr);
                  prot->Release();
                  pbc->Release();
                  return;
              }
    
              // Start at the beginning.
              pem->Reset();
    
              // Churn through enumeration.
              ULONG fetched;
              IMoniker *pmon;
              int n = 0;
              while(pem->Next(1, &pmon, &fetched) == S_OK) {
    
                  // Get DisplayName.
                  LPOLESTR pName;
                  pmon->GetDisplayName(pbc, NULL, &pName);
                  // Convert it to ASCII.
                  char szName[512];
                  WideCharToMultiByte(CP_ACP, 0, pName, -1, szName, 512, NULL,
                  NULL);
    
                  // Compare it against the name we got in SetHostNames().
                  if(!strcmp(szName, m_szDocName)) {
    
                      DoMsg("Found document in ROT!");
    
                      // Bind to this ROT entry.
                      IDispatch *pDisp;
                      hr = pmon->BindToObject(pbc, NULL, IID_IDispatch, (void
                      **)&pDisp);
                      if(!FAILED(hr)) {
                          // Remember IDispatch.
                          m_pDocDisp = pDisp;
    
                          // Notice...
                          sprintf(buf, "Document IDispatch = %08lx",
                          m_pDocDisp);
                          DoMsg(buf);
                      }
                      else {
                          DoErr("BindToObject()", hr);
                      }
                  }
    
                  // Release interfaces.
                  pmon->Release();
    
                  // Break out if we obtained the IDispatch successfully.
                  if(m_pDocDisp != NULL) break;
              }
    
              // Release interfaces.
              pem->Release();
              prot->Release();
              pbc->Release();
          }
    
          void COffCntrDispCtrl::TestDispatch()
          {
              ASSERT(m_pDocDisp);
    
              COleDispatchDriver doc(m_pDocDisp);
              DISPID dispID = 0;
              unsigned short *ucPtr = L"Name";
    
              // Get DISPID for Name.
              HRESULT hr = m_pDocDisp->GetIDsOfNames(IID_NULL, &ucPtr, 1,
              LOCALE_USER_DEFAULT, &dispID);
              ASSERT(!FAILED(hr));
    
    
              // Get Name property.
              CString name;
              doc.GetProperty(dispID, VT_BSTR, &name);
    
              AfxMessageBox(
                  CString("Document name is ") + name,
                  MB_SETFOREGROUND
              );
          }
    					
  9. Μεταγλώττιση!
Ακολουθήστε αυτά τα επόμενα βήματα για να ελέγξετε το στοιχείο ελέγχου στο Microsoft Excel 97:
  1. Ξεκινήστε το Microsoft Excel 97.
  2. Εμφάνιση τουΕργαλειοθήκη στοιχείων ελέγχουγραμμή εργαλείων (από τοViewμενού, κάντε κλικ στο κουμπίΓραμμές εργαλείων).
  3. Κάντε κλικ στο εικονίδιο Σφυρί & wrench άλλη δεξιά με τοΕργαλειοθήκη στοιχείων ελέγχουγραμμή εργαλείων και επιλέξτε το νέο στοιχείο ελέγχου, θα πρέπει να κληθεί OffCntrDisp.
  4. Σχεδιάστε ένα ορθογώνιο στο φύλλο για να εισαγάγετε το στοιχείο ελέγχου.Αποτελέσματα: Θα πρέπει να εμφανιστεί το στοιχείο ελέγχου εμφανίζεται, και λίγο αργότερα, ένα πλαίσιο μηνύματος με "Βρέθηκε το έγγραφο σε ROT." Στη συνέχεια, θα πρέπει να δείτε ένα άλλο πλαίσιο μηνύματος εμφανίζει κάτι παρόμοιο με "έγγραφο του IDispatch = 0043bf8c." Τέλος, θα πρέπει να εμφανιστεί ένα πλαίσιο μηνύματος σας ενημερώνει το όνομα του εγγράφου όπου έχει εισαχθεί.
Ακολουθήστε αυτά τα επόμενα βήματα για να ελέγξετε το στοιχείο ελέγχου στο Microsoft Office Excel 2007:
  1. Ξεκινήστε το Excel 2007.
  2. Κάντε κλικ στην καρτέλαΟ προγραμματιστήςTAB. Αν υπάρχει ήδη ο φάκελοςΟ προγραμματιστήςκαρτέλα δεν είναι ορατό στην κορδέλα, ακολουθήστε τα εξής βήματα για να ενεργοποιήσετε την καρτέλα:
    1. Κάντε κλικ στην καρτέλαΚουμπί του Microsoft Office, και στη συνέχεια κάντε κλικ στο κουμπίΕπιλογές του Excel.
    2. Κάντε κλικ στην καρτέλαΔημοφιλείςκαρτέλα και, στη συνέχεια, κάντε κλικ για να επιλέξετε τοΕμφανίζεται η καρτέλα "Προγραμματιστής" στην κορδέλαΠλαίσιο ελέγχου.
    3. Κάντε κλικOk.
  3. Στο"Φόρμες του Office" (Office Forms)ομάδα από τοΟ προγραμματιστήςκαρτέλα, κάντε κλικ στο κουμπίINSERT.
  4. underΣτοιχεία ελέγχου ActiveXΚάντε κλικΤα περισσότερα στοιχεία ελέγχου.
  5. ΣτοΤα περισσότερα στοιχεία ελέγχουπαράθυρο διαλόγου, κάντε κλικ στο κουμπίOffCntrDisp.
  6. Σχεδιάστε ένα ορθογώνιο στο φύλλο για να εισαγάγετε το στοιχείο ελέγχου.ΑποτελέσματαΘα εμφανιστεί το στοιχείο ελέγχου. Λίγο αργότερα, θα εμφανιστεί ένα πλαίσιο μηνύματος που περιέχει "Βρέθηκε το έγγραφο σε ROT". Στη συνέχεια, θα πρέπει να δείτε ένα άλλο πλαίσιο μηνύματος που μοιάζει με "έγγραφο του IDispatch = 0043bf8c." Τέλος, θα πρέπει να εμφανιστεί ένα πλαίσιο μηνύματος που σας ενημερώνει για το όνομα του εγγράφου όπου έχει εισαχθεί.

Ιδιότητες

Αναγν. άρθρου: 190985 - Τελευταία αναθεώρηση: Παρασκευή, 24 Σεπτεμβρίου 2010 - Αναθεώρηση: 3.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Office Word 2007
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 97 Standard Edition
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
Λέξεις-κλειδιά: 
kbautomation kbhowto kbmt KB190985 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:190985

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

 

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