首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在x64目标项目(AnyCpu)中使用FreeImage.NET?

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

Stack Overflow用户
提问于 2013-07-19 20:42:07
回答 2查看 4.1K关注 0票数 1

我正尝试在我的项目中使用FreeImage .NET包装器,我的对象是AnyCPU,而dll包装器在这种情况下不会工作,它只有在我以x86机器为目标时才能工作。

当我试图使用面向AnyCPU或X64的包装器加载一个文件时,它抛出了这个异常:

代码语言:javascript
运行
复制
"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/

...But my VS2012无法打开任何解决方案,它显示“找不到本地化资源”。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-23 06:21:57

您需要将免费映像库和.NET-wrapper编译为64位。

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

票数 1
EN

Stack Overflow用户

发布于 2019-11-22 20:22:20

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

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

下面的说明是为那些希望自己构建.NET包装器的人准备的。

为了澄清伯恩哈德的答案:

要在64位项目中使用FreeImage,将".NET-wrapper“FreeImageNet.dll编译为64位是不够的。

还必须确保您使用的是64位版本的FreeImage.dll FreeImage\Dist\x64\FreeImage.dll

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

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

  • http://freeimage.sourceforge.net/download.html下载最新的"FreeImage DLL" [WIN32/WIN64]归档文件。你不需要“源代码发行版”,除非你想构建底层的C++动态链接库。在我写这篇文章时,您下载的文件是VS中的FreeImage3180Win32Win64.zip.
  • Open库;让它将项目格式转换为2019。
  • Unload UnitTest project (为了避免由于缺少NUnit package).
  • Set Build Configuration / Platform to "x64".
  • Open FreeImage\Wrapper\FreeImage.NET\cs\FreeImage.NET.sln / Properties / Build而导致的错误-将"Treat warnings as errors"设置为"None"。注意:必须为您构建的每个"Platform"设置此属性。因此,如果你忘记首先设置Build Platform,在将Build Platform设置为x64之后,如果你想在调试应用程序时使用调试版本及其符号的FreeImageNET.pdb,请验证对于DebugRelease构建配置,这仍然是调试库项目/x64。您将需要应用程序的发布版本的Release dll。
  • 引用此库的任何.exe也必须引用FreeImage\Dist\x64\FreeImage.dll.

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

启动项目Sample 1.

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

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

将主可执行项目的配置设置为Debug + x64.

  • Build.的
  • 为确保您知道要生成到哪个.exe.
  • OPTIONAL文件夹中。
  • FreeImage.dllFreeImageNET.dllFreeImageNET.pdb复制到包含您的bin的文件夹中,并将FreeImage\Wrapper\FreeImage.NET\cs\Library\Library.csproj添加到您的解决方案中。这是VS 2019之前为您创建的"2019格式“版本。
  • 现在可以引用可执行项目中的两个dlls,并照常调试项目。(或者以依赖项的形式加上FreeImage.dll.)

引用Library项目

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17746336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档