我正在将我的应用程序的兼容性从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
答案 0 :(得分:2)
我终于让我们的解决方案使用64位工作。
神奇的是我意识到我实际上并不需要XAML中的控件;所以我最终做的是从XAML页面中删除控件,并从.xaml.cs代码的构造函数中实例化它。
所以:按照this link中的说明构建自定义控件。我认为你必须使用64位版本的MSBuild.exe进行构建,如the link you provided中所述。显然只有在创建自定义控件时才需要这样做;我能够直接从VS构建解决方案(但它也可以在MSBuild构建时正常工作,因此它也适用于自动构建)。
public
并重构:将其从axDrawingControl1
重命名为AxVisioControl
(最重要的是,不要忘记{{1} })对于x86 / 32位解决方案,请复制&将this.AxVisioControl.Name = "AxVisioControl";
和VisioAxControl.dll
引用到解决方案中的某个文件夹中。
在安装了64位Visio的构建环境中保存,复制/移动和打开自定义控件项目
AxMicrosoft.Office.Interop.VisOcx.dll
(对我来说,MSBuild_Path是C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ MSBuild.exe)来构建自定义控件项目以创建WPF控件DLL以供在最终的x64解决方案构建MSBuild_Path\MSBuild.exe /p:Configuration=Release /p:Platform=x64 your_project_file_name
和/bin/Release/VisioAxControl.dll
。/obj/Release/AxMicrosoft.Office.Interop.VisOcx.dll
控件。在XAML的代码隐藏中,在构造函数中:
<WindowsFormsHost name="MyWindowsFormsHost"></WindowsFormsHost>