Domanda

sto giocando con il controllo Microsoft Outlook View, cercando di capire le sue capacità, ma non sto ottenendo molto lontano. Si presenta in fase di progettazione, ma in fase di esecuzione dà solo un'eccezione "E_CLASSNOTREG". Come faccio a sapere quale classe si lamenta?

Ho appena creato un progetto WinForm, ha aggiunto il controllo alla casella degli strumenti, e trascinato al form. Vedo mia casella di posta di Outlook in fase di progettazione. Si aggiunge il seguente codice:

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
    System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
    this.axViewCtl1 = new AxMicrosoft.Office.Interop.OutlookViewCtl.AxViewCtl();
    ((System.ComponentModel.ISupportInitialize)(this.axViewCtl1)).BeginInit();
    this.SuspendLayout();
    // 
    // axViewCtl1
    // 
    this.axViewCtl1.Enabled = true;
    this.axViewCtl1.Location = new System.Drawing.Point(384, 184);
    this.axViewCtl1.Name = "axViewCtl1";
    this.axViewCtl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axViewCtl1.OcxState")));
    this.axViewCtl1.Size = new System.Drawing.Size(192, 192);
    this.axViewCtl1.TabIndex = 0;
    // 
    // Form1
    // 
    this.ClientSize = new System.Drawing.Size(1093, 633);
    this.Controls.Add(this.axViewCtl1);
    this.Name = "Form1";
    ((System.ComponentModel.ISupportInitialize)(this.axViewCtl1)).EndInit();
    this.ResumeLayout(false);
}

Poi corro e muore su di me con:

System.Runtime.InteropServices.COMException occurred
  Message="Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))"
  Source="System.Windows.Forms"
  ErrorCode=-2147221164
  StackTrace:
       at System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid)
       at System.Windows.Forms.AxHost.CreateWithoutLicense(Guid clsid)
       at System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid)
       at System.Windows.Forms.AxHost.CreateInstanceCore(Guid clsid)
       at System.Windows.Forms.AxHost.CreateInstance()
       at System.Windows.Forms.AxHost.GetOcxCreate()
       at System.Windows.Forms.AxHost.TransitionUpTo(Int32 state)
       at System.Windows.Forms.AxHost.CreateHandle()
       at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
       at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
       at System.Windows.Forms.AxHost.EndInit()
       at Sample.OutlookForm.Form1.InitializeComponent() in D:\source\tests\OutlookView\Sample.OutlookForm\Form1.Designer.cs:line 50
  InnerException: 

... l'eccezione è a EndInit ().

Inoltre, l'altra cosa strana è che ogni volta che clicco sul controllo nella finestra di progettazione, Visual Studio si blocca per un periodo, a volte per più breve di 30 secondi, altre volte devo uccidere il compito prospettive per arrivare VS rispondere.

Sono in esecuzione VS 2008 con le ultime patch / SP, su Windows 7 x64, e non ho l'ufficio 2007 con tutte le ultime patch e service pack installati.

Perché questo lavoro per me in fase di progettazione, ma non riescono in fase di esecuzione? E come posso scoprire di cosa si sta cercando non registrato?

È stato utile?

Soluzione

Sei, per caso, in esecuzione l'applicazione su un computer a 64 bit? Ho avuto lo stesso problema e si è rivelato essere a 64 bit di incompatibilità con il controllo ActiveX di Outlook.

Se la vostra applicazione in esecuzione in modalità nativa a 64 non è un requisito, si potrebbe modificare il programma a cadere con forza torna alla modalità di compatibilità a 32 bit su macchine a 64 bit. Ciò ha risolto il mio problema.

È possibile bersaglio piattaforma X86, mentre la costruzione vostra soluzione (scelta consigliata), oppure si potrebbe incidere il built eseguibile dopo, utilizzando corflags .

Altri suggerimenti

In primo luogo una rapida domanda: Come hai ottenuto il controllo sulla barra degli strumenti? Entro i controlli ActiveX?

Se è così, ho paura che non si può usare. Che il controllo è stato sviluppato per essere utilizzato all'interno di Outlook, non è un controllo esterno.

Ci sono diversi terzi controlli che è possibile utilizzare per emulare il look and feel di Outlook senza ricorrere a tali misure.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top