我正在玩Microsoft Outlook View控件,试图了解它的功能,但我没有走得太远。它出现在设计时,但在运行时它只是给出一个“E_CLASSNOTREG”异常。我如何找出它抱怨的课程?
我刚创建了一个winform项目,将控件添加到工具箱中,然后将其拖到表单中。我在设计时看到了我的Outlook收件箱。它添加了以下代码:
/// <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);
}
然后我跑了它,它死在我身上:
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:
......例外是在EndInit()。
另外,另一个奇怪的是每次我点击设计器中的控件时,visual studio会冻结一段时间,有时会短至30秒,其他时候我必须杀死outlook任务才能获得VS响应。
我在Windows 7 x64上使用最新的补丁/ SP运行VS 2008,并且我安装了Office 2007,其中安装了所有最新的补丁和服务包。
为什么这在设计时对我有效,但在运行时失败?我如何才能找到未注册的内容?
答案 0 :(得分:0)
首先是一个简单的问题:你是如何获得工具栏上的控件的?在ActiveX控件中?
如果是这样,我担心你不能使用它。开发该控件是为了在Outlook中使用,它不是外部控件。
您可以使用多个第三方控件来模拟Outlook的外观,而无需采取此类措施。
答案 1 :(得分:0)
您是否有机会在64位计算机上运行应用程序?我遇到了同样的问题,结果是与Outlook ActiveX控件的64位不兼容。
如果不要求以原生64模式运行您的应用程序,您可以修改您的程序,以便在64位计算机上强制回退到32位兼容模式。这解决了我的问题。
您可以在构建解决方案时定位X86平台(推荐),也可以使用corflags来破解构建的可执行文件。