1

我正在尝试在我的项目中使用 FreeImage .NET 包装器,我的 ptoject 以 AnyCPU 为目标,而 dll 包装器在此下不起作用,它仅在我以 x86 机器为目标时才有效。

当我尝试使用面向 AnyCPU 或 X64 的包装器加载文件时,它会引发此异常:

"Se ha intentado cargar un programa con un formato incorrecto. (Excepción de HRESULT: 0x8007000B)" 

Translated:
"Intent to load a program with incorrect format (Excepción de HRESULT: 0x8007000B)"

我尝试按照以下步骤在网络项目中使用 x64 freeimage:http: //www.sambeauvois.be/blog/2010/05/freeimage-and-x64-projects-yes-you-can/

...但是我的 VS2012 无法打开任何解决方案,它说“找不到本地化资源”。

freeimage 和包装器的来源在这里:http: //downloads.sourceforge.net/freeimage/FreeImage3154.zip

我需要将 dll 转换为与 anycpu 目标一起使用,或者使用其他解决方案来使其工作,我正在使用 VBNET。

4

2 回答 2

4

最简单的解决方案是使用FreeImageNET nuget 包。警告:我没有测试过这个;我不知道它如何处理 32 位和 64 位。

您可以在解决方案资源管理器中执行此操作 - "Manage NuGet packages for Solution...".

以下说明适用于希望自己构建 .NET 包装器的人。


澄清伯恩哈德的回答:

要在 64 位项目中使用 FreeImage,仅将“.NET-wrapper”编译为 64 位是不够的FreeImageNet.dll
还必须确保您使用的是 64 位版本的FreeImage.dll, FreeImage\Dist\x64\FreeImage.dll.

请注意,这不是“任何 CPU”解决方案。将主 exe 的项目平台设置为“x64”。

要构建FreeImageNet.dll64 位(在 中测试VS 2019 Community):

  • 从http://freeimage.sourceforge.net/download.html下载最新"FreeImage DLL" [WIN32/WIN64]的存档。您不需要“源代码分发”,除非您想构建底层 C++ dll。在我写这篇文章时,您下载的文件是.FreeImage3180Win32Win64.zip
  • FreeImage\Wrapper\FreeImage.NET\cs\FreeImage.NET.sln在VS中打开;让它将项目格式转换为 2019。
  • 卸载UnitTest project(以避免由于缺少 NUnit 包而导致的错误)。
  • 将构建配置/平台设置为"x64".
  • 打开库/属性/构建 - 设置"Treat warnings as errors""None". 注意:必须为"Platform"您构建的每个设置。因此,如果您忘记先设置 Build Platform,在将 Build Platform 设置为 x64 之后,请验证这仍然是“None”。
  • 右键单击库项目 / Build
  • 如果您想在调试应用程序时使用带有 for 符号的调试版本,请同时执行Debug并构建配置。您需要用于应用程序发布版本的 dll。ReleaseFreeImageNET.pdbRelease
  • 任何引用此库的 .exe 也必须引用FreeImage\Dist\x64\FreeImage.dll.

或者,验证您是否可以在该 .sln 中构建和运行示例 1:

  • 将配置设置为Debug + x64;启动项目Sample 1
  • 建造。如果你现在运行,它不会找到FreeImage.dll.
  • 查找bin现在包含的文件夹Sample01.exe。这还应该包含FreeImageNet.dll您之前构建的副本。
  • 您需要底层 C++ dll 的 x64 版本。复制FreeImage\Dist\x64\FreeImage.dll到您找到的文件夹中Sample01.exe
  • Program / Main在 Sample 的方法开始处设置断点。逐步检查,在控制台窗口中查找任何错误消息。最重要的是,确保FreeImage.IsAvailable()检查成功——不要说“FreeImage.dll 似乎丢失了”。

现在您可以使用自己的应用程序重复此操作:

  • 将您的主 exe 项目的配置设置为Debug + x64.
  • 建造。以确保您知道要构建到哪个 bin 文件夹。
  • FreeImage.dll,FreeImageNET.dll和复制FreeImageNET.pdb到包含您的.exe.
  • [可选] 添加FreeImage\Wrapper\FreeImage.NET\cs\Library\Library.csproj到您的解决方案中。这是VS 2019早前为你打造的“2019格式”版本。这使得调试包装源变得容易。
  • 现在在您的 exe 项目中引用这两个 dll,并像往常一样调试您的项目。(或将Library项目作为依赖项引用,加上FreeImage.dll.)

注意:将这些文件直接复制到您的 bin 文件夹是执行此操作的“肮脏”方式。是验证您可以使用 dll 构建和运行的最简单方法。更好的是让这些 dll 成为源代码控制下的“源”的一部分,作为构建过程的一部分复制到 bin 文件夹。谷歌其他地方的说明。

于 2019-11-22T12:22:20.460 回答
1

您需要将 freeimage 库和 .NET-wrapper 编译为 64 位。

http://www.sambeauvois.be/blog/2010/05/freeimage-and-x64-projects-yes-you-can/

于 2013-11-22T22:21:56.927 回答