【问题标题】:Unable to find an entry point named 'FreeImage_GetFileTypeU' in DLL 'FreeImageNET'在 DLL“FreeImageNET”中找不到名为“FreeImage_GetFileTypeU”的入口点
【发布时间】:2012-11-11 01:47:42
【问题描述】:

我刚刚下载了 FreeImage 3.15.4 Win32,我正在尝试浏览他们的 C# 示例。我有一台装有 Visual Studio Express 2010 的 64 位 Windows 7 机器,因此我将示例重新编译为 64 位,如此处所述 (http://www.sambeauvois.be/blog/2010/05/freeimage-and-x64-projects-yes-you-can/)。为了启动示例应用程序,我还必须更改 FreeImageStaticImports.cs 中“FreeImageLibrary”字符串的名称(生成的 DLL 命名为 FreeImageNet,而不是示例预期的 FreeImage)。

但是,当我运行示例时,我收到“无法在 DLL 'FreeImageNET' 中找到名为 'FreeImage_GetFileTypeU' 的入口点”。每当我调用 FreeImage 函数时都会出错。这些示例引用了包含 DLLImport 语句的库,所以我不太确定这里出了什么问题。有没有人有 FreeImage 和 C# 的经验可以提供一些建议?谢谢!

【问题讨论】:

    标签: c# dllimport freeimage


    【解决方案1】:

    我还必须更改“FreeImageLibrary”字符串的名称

    这就是你陷入困境的原因。这里涉及两个 DLL。 FreeImage.dll 是 native DLL,它包含 FreeImage_GetFileTypeU 导出。 FreeImageNET.dll 是 托管 类库,其中包含本机 DLL 的包装器,它没有异常消息告诉您的导出。

    您应该做的是从源代码重建本机 DLL,以便获得 64 位版本的 FreeImage.dll。那篇博客文章告诉你如何做到这一点。并提供下载,ymmv。

    还必须将其复制到构建输出文件夹中,以便在运行时可以找到它。一种简单的方法是使用 Project + Add Existing Item 将其添加到您的项目中,并将其“复制到输出目录”属性设置为“如果较新则复制”。

    【讨论】:

    • 我显然不知道自己在做什么。我实际上将示例项目转换为 x64,而不是本机 FreeImage DLL。不幸的是,我似乎无法按照我链接到的方向重建该 DLL。没有一个解决方案可以使用 Visual Studio Express 2010 进行转换。我尝试使用提供的下载,但这似乎不起作用。感谢您的帮助,我在正确的位置获得了 DLL,但我无法让它们工作。 :(
    • 不要在 Express 上尝试这个。只需将 C# 项目的目标平台更改为 x86 即可使用常规发行版。 Express 版本也很难做到这一点,您必须使用文本编辑器编辑项目文件。将“AnyCPU”更改为“x86”。免费软件只有在您的时间空闲时才免费。
    • 根据您的建议,我回到了 32 位库并能够使示例正常工作。事实证明,FreeImage 似乎并没有完全按照我的意愿做,但至少我在这个过程中学到了一些东西。谢谢!
    • 这对我不起作用。我在 Linux 上(据说支持 Mono)并且没有将 FreeImageLibrary 字符串更改为小写,它找不到库,因为文件系统区分大小写。此外,当库最终链接时,除了库似乎拒绝一切之外,一切似乎都正常工作,所有样本都不起作用(它们不会崩溃,库只是一直返回错误)等等......我本来期望的更好地支持FreeImage.NET,但设置起来是否非常困难。
    猜你喜欢
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2012-12-08
    • 2021-08-05
    • 2017-08-31
    • 1970-01-01
    相关资源
    最近更新 更多