64Bit visio上不支持无窗口ActiveX控件

时间:2013-04-23 11:17:28

标签: 64-bit activex visio

我正在将我的应用程序的兼容性从visio 32位扩展到visio 64位。我在win7(64)机器上使用visio 2013。我不支持无窗口ActiveX控件的例外。我试过了两个 随{2}提供的KB 980533和自述文件示例文件,用于在此位置为64位系统提供补救解决方案\ VisSDK \ Samples \ Readme Samples 64bit.htm。我尝试过DEP解决方案,但没有工作。

STACK TRACE:

   at System.Windows.Forms.AxHost.EnsureWindowPresent()
   at System.Windows.Forms.AxHost.InPlaceActivate()
   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()

{“无法获取'AxDrawingControl'控件的窗口句柄。不支持无窗口ActiveX控件。”}

系统信息:

操作系统:Windows 7 64位 Visio:Visio 2013 64位 目标平台:.Net 4.5,任何CPU Interop:AxInterop.Microsoft.Office.VisOcx.dll(在32位机器上创建) Visio绘图控件:VISOCX.DLL 64位(是的,它已注册) IDE:Visual Studio 2013 Professional

1 个答案:

答案 0 :(得分:2)

我终于让我们的解决方案使用64位工作。

神奇的是我意识到我实际上并不需要XAML中的控件;所以我最终做的是从XAML页面中删除控件,并从.xaml.cs代码的构造函数中实例化它。

所以:按照this link中的说明构建自定义控件。我认为你必须使用64位版本的MSBuild.exe进行构建,如the link you provided中所述。显然只有在创建自定义控件时才需要这样做;我能够直接从VS构建解决方案(但它也可以在MSBuild构建时正常工作,因此它也适用于自动构建)。

创建自定义控件

  1. 在安装了32位Visio的构建环境中创建名为VisioAxControl的新自定义控件项目
  2. 在VS Designer中,将Visio绘图控件从工具箱拖放到WindowsFormsHost内的窗体中。您可能需要将此控件添加到工具箱(右键单击工具箱,“选择项目...”)。执行此步骤会导致VS创建(并添加引用)新的DLL,类型为AxMicrosoft.Office.Interop.VisOcx的“Microsoft Visio 15.0绘图控件类型库”。此DLL放在项目下的/ obj / Release目录中,但如果您只是选择引用并将“Copy local”设置为“true”,则会在构建时复制到/ bin。
  3. 打开代码隐藏并将控件的范围更改为public并重构:将其从axDrawingControl1重命名为AxVisioControl(最重要的是,不要忘记{{1} })
  4. 构建项目以为最终的x86 / 32位解决方案构建
  5. 创建WPF控制DLL
  6. 对于x86 / 32位解决方案,请复制&将this.AxVisioControl.Name = "AxVisioControl";VisioAxControl.dll引用到解决方案中的某个文件夹中。

    构建64位控件

  7. 在安装了64位Visio的构建环境中保存,复制/移动和打开自定义控件项目

  8. 将构建平台更改为x64
  9. 打开管理员命令提示符,cd到您的项目目录
  10. 运行AxMicrosoft.Office.Interop.VisOcx.dll(对我来说,MSBuild_Path是C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ MSBuild.exe)来构建自定义控件项目以创建WPF控件DLL以供在最终的x64解决方案构建
  11. 包含在您的64位项目中

    1. 复制&参考MSBuild_Path\MSBuild.exe /p:Configuration=Release /p:Platform=x64 your_project_file_name/bin/Release/VisioAxControl.dll
    2. 在表单的XAML中,添加/obj/Release/AxMicrosoft.Office.Interop.VisOcx.dll控件。
    3. 在XAML的代码隐藏中,在构造函数中:

      <WindowsFormsHost name="MyWindowsFormsHost"></WindowsFormsHost>
    4. 保存&amp;建立你的项目!