1

Visual C++ 2010 で外部 DLL (AutoItX 提供) を使用しようとしています。AutoItX は DLL を提供しますが、何らかの理由で LIB を提供しないため、Visual Studio で生成しました。

問題は、リンカーがライブラリに対するリンクに問題があるように見えることです。プロパティ->リンカー->入力の下に追加の依存関係としてAutoItX3.libを追加し、ディレクトリをプロパティ->リンカー->一般->追加のライブラリディレクトリに追加しました。何をしても、次のエラーが発生します。

1>main.obj : error LNK2019: unresolved external symbol _AU3_Send@8 referenced in function _WinMain@16
1>main.obj : error LNK2019: unresolved external symbol _AU3_WinWaitActive@12 referenced in function _WinMain@16
1>main.obj : error LNK2019: unresolved external symbol _AU3_Run@12 referenced in function _WinMain@16
1>main.obj : error LNK2019: unresolved external symbol _AU3_Sleep@4 referenced in function _WinMain@16

AU3_Send、AU3_WinWaitActive、AU3_Run、および AU3_Sleep は、プログラム main.cpp によって呼び出される関数です。これらの関数は明らかに DLL に存在するため、私は本当にアイデアがありません。どんな助けでも大歓迎です。

4

1 に答える 1

1

インターフェイスの手段として DLL のみを提供することは非常に一般的です。多くのソフトウェア プロバイダーがそうしています。これを行うと、次のような影響 (結果) があります。

  • クライアント アプリケーションは、提供されたライブラリにのみ動的にリンクできます (そのため、Dynamic-Link Library という名前が付けられています)。プロバイダー (ライブラリー) とコンシューマー (アプリまたはその他のライブラリー) の間のバインディングは動的に行われます。
  • クライアントは、ライブラリをバインドして目的のシンボル (関数) を取得するために、LoadLibray とGetProcAddressを使用する必要があります。
  • ライブラリとコンシューマーの間のインターフェース (コントラクト) は、ヘッダー ファイルを介して文書化する必要があります。
  • リンクはコンパイラ/リンカー時ではなく実行時に行われるため、LIB は提供されません (必要ないため)。

問題を解決するには、Visual Studio 構成に入れた静的依存関係 (LIB) を削除し、LoadLibrary と GetProcAddress を使用して実行時に依存関係を設定するだけです。

于 2012-06-26T05:18:50.517 に答える