2

Visual Studio 2008には、2つのプロジェクトを含むソリューションがあります。1つは.dllで、もう1つは.dllを呼び出すコマンドラインアプリケーションです。

ファイルの1つ( "ast.c")を削除してから直接追加すると、次のエラーが発生します。

このエラーを修正するにはどうすればよいですか?

エラー22エラーLNK2019:未解決の外部シンボル "__declspec(dllimport)int __cdecl ast_get_int_value(struct ast_node *、void *)"(__ imp_?ast_get_int_value @@ YAHPAUast_node @@ PAX @ Z)関数 "double __cdecl d_low(struct ast_ struct ast_node *、struct ast_node *、struct ast_node *、void *) "(?d_low @@ YANPAUast_node @@ 000PAX @ Z)main.obj main

4

1 に答える 1

2

了解しました。プロジェクトを右クリックし、[リンカー]、[入力]、[追加の依存関係]に移動して、「.. \ $(ConfigurationName)\dll.lib」を追加する必要がありました。ファイル「dll.lib」は、.dllのコンパイルプロセスの一部として作成されます。外部の依存関係を解決できるように、このファイルの場所をリンカーに通知する必要があります。これにより、リンクエラーが完全に修正されました。

リンクプロセスを説明するhttp://www.codeproject.com/KB/DLL/XDllPt1.aspxからのいくつかの素晴らしいヒント:

  • DLLはそのシンボルをエクスポートし、アプリケーションはDLLシンボルをインポートします。アプリケーションをコンパイルするとき、コンパイラはインクルードファイル(Test.h)を介してDLLシンボルを確認します。アプリケーションをリンクするとき、リンカはインポートライブラリ(Test.lib)を介してDLLシンボルを確認します。
  • アプリケーションを実行するときは、DLLはEXEと同じディレクトリにある必要があります。Windowsの初期のバージョンでは、アプリケーションDLLをWindowsまたはシステムディレクトリに配置することは許容されていましたが、これは問題を引き起こすことが認識されているため、実行しないでください。

また、以下も参照してください。

http://support.microsoft.com/kb/815065

と:

http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/a22571ad-ef89-4f94-afca-4f4d32cdd0f2

于 2010-06-21T22:56:46.777 に答える