3

AxDrawingControl在我的应用程序中使用dll AxInterop.Microsoft.Office.Interop.VisOcx.dll(v4.0.30319)时出现以下异常:

System.Runtime.InteropServices.COMException occurred
HResult=-2147221164
Message=Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
Source=System.Windows.Forms
ErrorCode=-2147221164

The 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 TestVisOcxAxDrawing.VisioTestForm.InitializeComponent() in C:\ TestVisio\TestVisOcxAxDrawing\VisioTestForm.Designer.cs:line 55
  InnerException:
  • 应用程序在配置管理器中配置为“Any CPU” -> “Active Solution Platform”</li>
  • 该应用程序在 Windows8 64 位操作系统中作为 64 位应用程序执行时会引发上述错误。
  • Visio 安装的是Professional 2010,x86 版本。

    以下是我迄今为止的观察:

    1. 安装 visio x64 版本时,visio 绘图控件加载正常。
    2. 如果将“Active Solution Platform”更改为 x86 版本,它也可以正常工作。

不幸的是,在我的情况下,上述两种解决方法都是不可能的,因为它是一次单击应用程序,并且客户端可以在安装了任何 Visio 版本的任何版本的 Windows 上运行。

问题:

  1. 应用程序是否可以配置为“任何 CPU”并且仍然支持 visio 32 和 64 位版本?
  2. 是否有任何替代方案/最佳实践来处理这种情况?

    • 例如:分别发布 32 和 64 版本的应用程序?
    • 或者是否可以将 64 位和 32 位版本的 Visio dll 与应用程序一起提供,并在发生错误时在它们之间切换?

重建步骤

  1. 在 64 位 Windows 操作系统的机器上,在 VS2010 中新建一个 Windows 窗体项目。
  2. Any CPU像在 Configuration Manager -> 中一样配置项目Active Solution Platform
  3. 右键单击工具箱并单击Choose Items-> 导航到COM Components选项卡 -> 检查Microsoft Office Visio 14.0 Drawing Control
  4. Visio 绘图控件现在将出现在工具箱上。
  5. Microsoft Office Visio 14.0 Drawing Control控件拖到窗体中,然后按F5
  6. 错误会Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))抛出。

谢谢, 问候, 普拉文

4

0 回答 0