我正在尝试升级旧应用程序。为了降低复杂性,我目前已将应用程序升级到Dotnet V2.0。该应用程序有一个outlook模块,它使用' AxViewCtl'。我无法在运行时加载此控件,但在设计视图中,我可以看到Outlook邮件已填充。
每次运行应用程序时,我都会收到以下错误。
未注册的类(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG))
堆栈追踪:
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 App.frmOutlook.InitializeComponent() in d:\App\Forms\frmOutlook.cs:line 212
at raft.raftlegal.frmOutlook..ctor() in d:\App\Forms\frmOutlook.cs:line 37
at raft.raftlegal.RaftLegal.Form1_Load(Object sender, EventArgs e) in d:\App\Main.cs:line 3231
当用上述详细信息搜索时,我知道DLL存在问题。我注册了所有相关的DLL仍然是我总是得到相同的错误。请求您协助我解决此问题。如果你需要更多详细信息请注释,将尽快提供。
答案 0 :(得分:0)
我遇到了与Visio控件完全相同的情况。该项目是在一台32位计算机上使用Visio 32位创建的,然后在另一台64位计算机上使用Visio 32位运行。因为项目是作为"任何CPU"构建的,所以它在64位机器上以64位进程开始,并且无法加载32位Visio。同时,Visual Studio安装为32位,能够非常精细地将32位Visio控件加载到设计环境中。
我明确地将项目目标更改为x86后,一切都已修复。如果我安装了Office 64位版本,我必须将构建目标更改为x64才能成功。如果以上建议更改平台目标对您不起作用,请再次仔细检查以确保安装的MS Office的位掩码与项目目标的位掩码一致。如果你做出正确的选择,我相信它应该修复。
在将解决方案部署到客户端时也要注意这一点:您应该维护两个版本:x86和x64用于任何使用MS Office ActiveX组件的项目。用户应明确选择与其安装的MS Office版本相对应的应用程序版本,以使其正常工作。
我相信@HansPassant的评论正是这个问题的正确答案。所有的学分应该给他。