【问题标题】:Interop: Retrieving the COM class factory互操作:检索 COM 类工厂
【发布时间】:2015-03-19 15:08:52
【问题描述】:

我正在使用 32 位 Win 7 在 VS2013 中开发 32 位应用程序。 正如预期的那样,我使用了一个名为“xpdfText.dll”的注册 COM,在 %windir%\system32 中注册。 代码如下:

    public static string PDF_XPDF(byte[] PDFByte = null, string filename = null, string mode = "layout")
    {

        XpdfText.XpdfText pdf;
        pdf = new XpdfText.XpdfText();


        if (filename == null)
        {
            // Create a UCOMIStream from the allocated memory
            IStream comStream;
            Common.CreateStreamOnHGlobal(IntPtr.Zero, true, out comStream);
            comStream.Write(PDFByte, PDFByte.Length, IntPtr.Zero);
            pdf.loadStream(comStream);
        }
        else
            pdf.loadFile(filename);

        if (mode == "layout")
            pdf.physicalLayoutMode = true;

        pdf.textEncoding = "Latin1";
        int n = pdf.numPages;
        string lines = pdf.convertToTextString(1, n);

        return lines;
    }

最近,我买了一台新电脑并搬到了 64 位 Win 7。 由于我的解决方案要部署在 32 位系统中,因此我选择了我的 C# 项目的目标平台为 x86(而不是“任何 CPU”,默认情况下),因此我也选择注册相同的 32 位 xpdftext.dll在 %windir%\syswow64 中。

当我调试程序时,一切都很顺利,直到类'pdf'被初始化:

pdf = new XpdfText.XpdfText();

显示如下错误:

未处理的类型异常 在 mscorlib.dll 中发生“System.Runtime.InteropServices.COMException”

附加信息:检索组件的 COM 类工厂 由于 CLSID {00000000-0000-0000-0000-000000000000} 失败 以下错误:80040154 类未注册(异常来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))。

不用说,CLSID {00000000-0000-0000-0000-000000000000} 不存在,所以我不明白我做错了什么。 我已经阅读了很多主题并遵循了指导方针,但到目前为止,我不知道如何解决这个问题。

【问题讨论】:

  • 嗯,那个组件在你的新机器上的传输不是很好。然而,这最终是如何产生那个虚假的 CLSID {guid} 的却非常难以解释。该数字来自类型库,是在您添加对项目的引用时生成的。我怀疑你一直在解决另一个问题,但没有告诉我们。您可以做的唯一合理的事情是删除引用并将其添加回来,这可能会起作用。拥有它的公司有一个支持电话号码,看起来你必须打电话给它。
  • 我已经给公司发了邮件,虽然同时在这里发布了这个问题,因为我不确定问题是否是由于DLL,而是更深层次的麻烦。另一方面,如果我想解决我的问题,隐藏一些东西会更愚蠢,我也没有必要的技能来破解任何东西。
  • 发生了一些奇怪的事情。我创建了另一个项目,它可以工作,但在第一个项目中没有......

标签: c# .net com-interop


【解决方案1】:

最后,我设法解决了这个问题。 就像在 COM 的属性中修改一个标志一样简单。

【讨论】:

    【解决方案2】:

    确保您已将目标平台更改为 32xbit 而不是 64xbit 或 Any CPU

    项目>>属性>>构建>>目标平台

    【讨论】:

      猜你喜欢
      • 2018-12-12
      • 2010-12-02
      • 2012-08-05
      • 2015-08-01
      • 2010-10-27
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多