0

MSVC 2010 の win32 コンソール アプリケーション プロジェクトでライブラリlibMPSSE.dllを使用する必要があります。コードを記述した後、.cpp ファイルが存在するフォルダーに dll をコピーしました。正常にコンパイルできましたが、問題はリンク エラーが発生していることです。

libMPSSE.dll: 致命的なエラー LNK1107: 無効または破損したファイル: 0x308 で読み取ることができません

本当にdll自体に問題がありますか、それともdllパスに問題がありますか。dll をプロジェクトに追加するにはどうすればよいですか?

彼らは.libファイルを提供していません。完全なコードはこちら

4

2 に答える 2

2

これらは、DLL にリンクするための通常の手順です。

  1. DLL の関数を使用する必要があるソース ファイルに、DLL のヘッダー ファイルを含めます。通常、ビルド環境のインクルード パスにヘッダー ファイルの場所が含まれていることを確認する必要があります。IDE では、追加のインクルード ディレクトリ構成設定を使用してこれを行うことができます。
  2. DLL の .lib ファイルをリンカーに渡します。IDE でこれを行うには、.lib ファイルを [追加の依存関係]設定に追加します。また、通常、.lib ファイルへのパスを [追加のライブラリ ディレクトリ]設定に追加する必要があります。
  3. これが完了したら、プログラムをコンパイルしてリンクする必要があります。実行するには、実行時に DLL 自体が見つかるようにする必要があります。これを実現する最も簡単な方法は、実行可能ファイルと同じディレクトリに配置することです。

私の推測では、エラー メッセージを見て、ステップ 2 で .lib ファイルを渡すのではなく、.dll をリンカに渡したのだと思います。

于 2013-05-03T11:00:48.880 に答える
1

ここで前述したように、C リンカーを使用して .dll ファイルに直接リンクすることはできません。.dll ファイルをロードして関数へのポインターを返すことができる win32 API があります。通常、.dll ファイルには .lib ファイルが付随しており、この負担を軽減し、.dll ファイルが公開する API を提供するコードが含まれています。この .lib ファイルにリンクし、作成した .exe ファイルの近くに .dll ファイルを配置するだけです。

特に libMPSSE に関しては、提供された .a ファイルの名前を .lib ファイルに変更して、Visual Studio でリンクできることがリリース ノートに記載されています ([プロジェクト プロパティ] -> [構成プロパティ] -> [リンカー] -> [入力])。私はそれを試してみましたが、想定どおりに動作します。

于 2013-08-20T11:17:59.140 に答える