Interop:检索COM类工厂

时间:2015-03-19 15:08:52

标签: c# .net com-interop

我使用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(默认情况下代替“Any 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}不存在,所以我不明白我做错了什么。 我已经阅读了很多主题并遵循了指南,但是到目前为止,还不知道如何解决问题。

2 个答案:

答案 0 :(得分:1)

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

enter image description here

答案 1 :(得分:0)

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

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