如何在x64目标项目(AnyCpu)中使用FreeImage.NET?

时间:2013-07-19 12:42:07

标签: c# .net vb.net freeimage target-platform

我正在尝试在我的项目中使用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

我需要转换为使用anycpu定位的dll或其他解决方案才能使其正常工作,我正在使用VBNET。

2 个答案:

答案 0 :(得分:1)

您需要将freeimage库和.NET包装器编译为64位。

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

答案 1 :(得分:0)

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

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

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


要澄清伯恩哈德的答案:

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

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

要构建64位的FreeImageNet.dll(在VS 2019 Community中进行测试):

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

(可选)验证您可以在该.sln中构建并运行示例1:

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

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

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

注意:将这些文件直接复制到bin文件夹是这样做的“肮脏”方法。是验证您可以使用dll构建并运行的最简单方法。更好的是将这些dll作为源代码控制下的“源”的一部分,并在构建过程中将其复制到bin文件夹中。谷歌在其他地方获得有关说明。

相关问题