我使用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}不存在,所以我不明白我做错了什么。 我已经阅读了很多主题并遵循了指南,但是到目前为止,还不知道如何解决问题。
答案 0 :(得分:1)
最后,我设法解决了这个问题。 它就像修改COM属性中的标志一样简单。
答案 1 :(得分:0)
确保您已将目标平台更改为32xbit而不是64xbit或任何CPU
项目>>属性>>构建>>目标平台