【问题标题】:Using Native DLLs called by .NET Assemblies in VB.NET在 VB.NET 中使用 .NET 程序集调用的本机 DLL
【发布时间】:2014-04-16 10:30:25
【问题描述】:

我正在尝试在我的 VB.NET 项目中使用第 3 方 DLL(PDFExtract from 3-Heights)。该软件包附带 2 个 .NET DLL,我应该按照手册将其添加为项目中的引用,以及我需要将其作为现有项目添加到项目中的第三个本机 DLL。

帮助说:“3-Heights™ PDF Extract API 不提供纯 .NET 解决方案。相反,它由添加到项目中的 .NET 程序集和由.NET 程序集。安装和部署工具时必须考虑到这一点。"

我完全按照这些步骤操作,但是当我尝试从 DLL 初始化对象时出现以下错误: “在 MyProject.exe 中发生了“System.TypeInitializationException”类型的未处理异常 附加信息:“Pdftools.PdfExtract.Document”的类型初始化程序引发了异常。”

根据帮助手册,这表明windows找不到本地DLL。

下载的包包含示例 VB.NET 项目,令人惊讶地运行没有问题。我比较了这两个项目,找不到与问题相关的任何不同之处。如果我以该示例项目为起点,然后在其上添加我的文件并调用我的程序,那么代码将起作用!我的项目中必须缺少一些设置或链接。有什么想法吗?

我的问题是我想创建一个 DLL,所以我需要一个新的类库项目。因此,我不能从作为 Windows 窗体项目的示例项目开始。

我的问题是:是否有任何隐藏设置或指向 DLL 的链接可以在示例项目中使用,而不是在我的项目中?否则,我看到的可能是什么原因?

【问题讨论】:

  • 我认为您应该将 Native DLLs 属性更改为 Copy AlwaysCopy If Newer 以便链接器将 dll 复制到您的构建路径。最好将编译器选项设置为None
  • 如果您清理您的解决方案,然后重新构建,本机 dll 是否与他们的 .net 包装器和您的东西一起部署?即出现在 bin/debug 中(或任何你正在构建它的地方)。
  • 实际上它被设置为 Copy If Newer。我不明白您将编译器选项设置为无的意思,但我转到项目属性、编译器选项卡并比较了示例和我的项目并发现了不同之处:标有“首选 32 位”的复选框已禁用,并且在工作示例项目中显示为灰色,并在我的项目中启用。我禁用了它,一切正常!非常感谢您的启发。

标签: .net vb.net dll


【解决方案1】:

好吧,受 bansi 的启发,我查看了 Compiler 选项卡中运行良好的示例项目和无法运行的项目之间的差异,并在标有“Prefer 32-bit”的复选框中发现了差异。这在示例中被禁用并显示为灰色,但在我的项目中被选中(可能是因为项目设置为使用 .NET Framework 4,而我默认使用 4.5)。

我取消选中“首选 32 位”复选框并选择 .NET 框架 4,然后一切都变得很酷!不确定导致问题的确切原因,但至少我的项目现在编译和运行没有错误。

再次感谢班西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 2014-12-05
    • 2013-05-08
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多