【发布时间】: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