前提・実現したいこと
C#を使い、とあるプログラムを作って、nugetから入手したlibzbar-cilというライブラリを使っていたところエラーが出てしまいました。
発生している問題・エラーメッセージ
System.BadImageFormatException: '間違ったフォーマットのプログラムを読み込もうとしました。 (HRESULT からの例外:0x8007000B)'
該当のソースコード
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Runtime.InteropServices; 5using System.Text; 6using System.Threading.Tasks; 7using System.Windows; 8using System.Windows.Controls; 9using System.Windows.Data; 10using System.Windows.Documents; 11using System.Windows.Input; 12using System.Windows.Media; 13using System.Windows.Media.Imaging; 14using System.Windows.Navigation; 15using System.Windows.Shapes; 16 17namespace ISBN_to_Sheet 18{ 19 public partial class MainWindow : Window 20 { 21 public MainWindow() 22 { 23 InitializeComponent(); 24 } 25 26 private void button_Click(object sender, RoutedEventArgs e) 27 { 28 camload p = new camload(); 29 Nullable<bool> result = p.ShowDialog(); 30 } 31 } 32 }
試したこと
エラーの発生元はlibzbar-0.dllのフォーマットエラーだと思います。
まず、エラー文で調べてみました。64bitプログラムで32bit用dllを動かすとエラーが出るということはわかったのですが、32bitにしてもエラーが出てしまいます。
一応32bitで実行されていることは確認済みです。
補足情報(FW/ツールのバージョンなど)
visual studio 2019
windows10 pro
データが壊れていてもそのようなエラーになると思います。
nuget.org に zbarsharp というパッケージは存在していないようですが、一体何をインストールしたんでしょうか?
すみません。名前間違えました。libzbar-cilです。
また、データは壊れていないと思います。別のプログラムから(正常に動く)持ってきたDLLなので。
DLL だけ一つ持ってきても動かない可能性はあります。アセンブリかどうか、呼び出し規約は合っているか、必須ファイルが欠けていないかなど様々な要因はありますが、それよりも正式にインストールしてください。
正式にインストールしたものでもエラーが起きます。他のところからエラーを持ってきてもエラーが起きます。
あと、DLLがない場合はこのようなエラーが出ます。
DLL 'libzbar-0' を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)'
>nugetから入手したlibzbar-cilというライブラリを使っていた
流石にこの一文から
>別のプログラムから(正常に動く)持ってきたDLL
を読み取る読解力は無いです。
質問を編集しこれが解るように追記ください。
正式なDLLを持ってきた別プログラムに入れても作動します。
すみません。dll名はlibzbar-0.dllです。
正式な DLL を持ってきた別プログラムという意味がよくわかりませんが、とにかく作っているプロジェクトに正式にインストールしてください。
「正式な」はnugetから「正式に」入れた(インストールした)という意味です。
別プログラムにインストールしたものを抜き出したものは正式にインストールしたとは言いません。そのように読み取れますが、違うのですか? 違うのであれば、こちらで再現できるよう「最小のプロジェクトを」「新規作成」し、「詳細な手順」を掲載してください。
よくわかりませんが、そのDLLというのはC#から使える、という事ですか?
もちろん、問題が再現することを確かめてから掲載するようにしてください。
nugetでインストールしたものなので別プログラムから抜き出したものではありません。
実験用に別プログラムから抜き出しただけです。
また、作るのにあたって使ったプログラムは
https://github.com/jonasfj/zbar-sharp/blob/master/example/image-scanner/image-scanner.cs
こちらです。なので、こちらが最小のプログラム(少し余分なものも含まれている)です。
DLLがC#から使えるというのはnugetからインストールしたものなのでできるとは思いますが僕もよくわかりません。
わざわざカッコでくくったのに。
あなたが行った手順が間違っていればその間違いを発見し、間違っていなければ別のところに問題があることを確定させるための作業です。こちらで補完したのでは意味がありません。
その部分はよくわかりませんが、構文エラーなどはビルド時にエラーが出ますし、該当部分のプログラムを削除するとエラーは収まります。
そりゃ動かないでしょうね。
原因はわかりましたが、ここで言うのははばかられるので差し控えます。
回答1件
あなたの回答
tips
プレビュー