尝试在 C# 中使用 ActiveX 控件加载 PDF 文件时出现 COMException 错误

Posted

技术标签:

【中文标题】尝试在 C# 中使用 ActiveX 控件加载 PDF 文件时出现 COMException 错误【英文标题】:COMException error when trying to load PDF file using ActiveX Control in C# 【发布时间】:2013-03-03 03:11:51 【问题描述】:

我正在为 Windows 桌面使用 VS 2012 Express。

private void button1_Click(object sender, EventArgs e)

    DialogResult result = openFileDialog1.ShowDialog();
    if (result == DialogResult.OK)
    
        axAcroPDF1.LoadFile(openFileDialog1.FileName);
    

我使用 Acrobat Reader ActiveX 控件;将其放入一个表格中。我正在尝试加载 PDF 文件。但我收到以下错误消息:

未处理的类型异常 'System.Runtime.InteropServices.COMException' 发生在 System.Windows.Forms.dll

附加信息:类未注册(HRESULT 异常: 0x80040154 (REGDB_E_CLASSNOTREG))

【问题讨论】:

已经有数百个关于这个错误代码的问题。在本页右上角的搜索框中输入“0x80040154”。 【参考方案1】:

您是否有可能在 64 位 Windows 上构建“x64”目标或“任何 CPU”?根据这篇文章Using Adobe Reader in a WPF app,Acrobat DLL 是 32 位的,因此必须在“x86”32 位版本中运行。

引自文章:“此外,由于当前没有 x64 版本的 Acrobat DLL,因此明智的做法是确保将目标平台设置为 x86(位于项目属性的构建选项卡上),否则会出错沿着 “Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))” 的行会发生——如果你问我,这很神秘!”

【讨论】:

以上是关于尝试在 C# 中使用 ActiveX 控件加载 PDF 文件时出现 COMException 错误的主要内容,如果未能解决你的问题,请参考以下文章

C# .Net 4.0 应用程序中托管的 C++ ActiveX 控件中的 Xml.Serializer 非法强制转换异常

单击时,如何使使用 C# 编写的 ActiveX 控件在 JavaScript 中引发事件?

C# ActiveX 网页打包验证自动升级

可以用 C# 构建一个 64 位 ActiveX 控件供企业应用程序使用吗

您将使用哪种 C# 项目类型来重新开发 MFC C++ activex 控件?

如何删除ActiveX控件