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フリーイメージを操作する手順を実行しようとしました。

...しかし、私の VS2012 はソリューションを開くことができず、「ローカライズされたリソースが見つかりません」と表示されます。

freeimage とラッパーのソースはこちら: http://downloads.sourceforge.net/freeimage/FreeImage3154.zip

Anycpuターゲティングで動作するように変換されたdll、またはそれを動作させるための他のソリューションが必要です。私はVBNETで作業しています。

4

2 に答える 2

4

最も簡単な解決策は、 FreeImageNET nuget packageを使用することです。警告: 私はこれをテストしていません。32ビット対64ビットをどのように扱うのかわかりません。

これは、ソリューション エクスプローラーで行うことができます - "Manage NuGet packages for Solution..."

以下の手順は、.NET ラッパーを自分でビルドしたい人向けです。


ベルンハルトの答えを明確にするには:

FreeImageNet.dll64 ビット プロジェクトで FreeImage を使用するには、「.NET ラッパー」を 64 ビットとしてコンパイルするだけでは不十分です。の 64 ビット バージョンを
使用していることも確認する必要があります。FreeImage.dllFreeImage\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.slnVS で開きます。プロジェクト形式を 2019 に変換します。
  • アンロードUnitTest project(NUnit パッケージの欠落によるエラーを回避するため)。
  • ビルド構成/プラットフォームを に設定し"x64"ます。
  • ライブラリ/プロパティ/ビルドを開く - に設定"Treat warnings as errors""None"ます。"Platform"注: これは、ビルドごとに設定する必要があります。そのため、最初に Build Platform を設定するのを忘れた場合は、Build Platform を x64 に設定した後、これがまだ "None" であることを確認してください。
  • ライブラリ プロジェクト / を右クリックしますBuild
  • アプリのデバッグ中に for シンボルを使用してデバッグ バージョンを使用する場合は、 forDebugReleasebuild 構成の両方を実行します。アプリのリリース ビルド用の dll が必要になりますFreeImageNET.pdbRelease
  • このライブラリを参照する .exe は、 も参照する必要がありますFreeImage\Dist\x64\FreeImage.dll

必要に応じて、その .sln でサンプル 1 をビルドして実行できることを確認します。

  • 構成を に設定しDebug + x64ます。スタートアッププロジェクトSample 1
  • 建てる。今実行すると、 が見つかりませんFreeImage.dll
  • bin現在含まれているフォルダーを見つけますSample01.exeFreeImageNet.dllこれには、以前に作成した のコピーも含まれているはずです。
  • 基礎となる C++ dll の x64 バージョンが必要です。FreeImage\Dist\x64\FreeImage.dllを見つけたフォルダにコピーしますSample01.exe
  • サンプルのProgram / Mainメソッドの開始時にブレークポイントを設定します。手順を追って、コンソール ウィンドウでエラー メッセージを探します。最も重要なことは、FreeImage.IsAvailable()チェックが成功することを確認することです。「FreeImage.dll が見つからないようです」とは言いません。

これで、独自のアプリでこれを繰り返す準備ができました。

  • メインの exe プロジェクトの構成を に設定しDebug + x64ます。
  • 建てる。ビルドしている bin フォルダーを確実に把握するため。
  • 、、およびをFreeImage.dll、が含まれるフォルダにコピーします。FreeImageNET.dllFreeImageNET.pdb.exe
  • [オプション] ソリューションに追加FreeImage\Wrapper\FreeImage.NET\cs\Library\Library.csprojします。これは、VS 2019 が以前に作成した "2019 形式" バージョンです。これにより、ラッパー ソースへのデバッグが容易になります。
  • ここで、exe プロジェクトで 2 つの dll を参照し、通常どおりプロジェクトをデバッグします。(または、Libraryプロジェクトを依存関係として参照し、さらにFreeImage.dll.)

注: これらのファイルを bin フォルダーに直接コピーするのは、これを行うための「汚い」方法です。dll を使用してビルドおよび実行できることを確認する最も簡単な方法でした。これらの dll をソース コード管理下の「ソース」の一部にし、ビルド プロセスの一部として bin フォルダーにコピーすることをお勧めします。その手順については、他の場所で Google を参照してください。

于 2019-11-22T12:22:20.460 に答える
1

freeimage ライブラリと .NET ラッパーを 64 ビットにコンパイルする必要があります。

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

于 2013-11-22T22:21:56.927 に答える