2011-02-07 21 views
1

私は2つのプロジェクトのソリューションを持っています:1つは単純なクラス(dll_test)を持つ単純なDLLです。 2番目のプロジェクトはdllプロジェクトを参照し、dllプロジェクト(dll_tester)をテストするために使用されるはずです。 dllプロジェクトはうまく構築されますが、テスタープロジェクトは常にdll_testを見つけることができないと不平を言います。 libの代わりにdll_test。 dllそうであるように。Visual Studio 2008 C++。問題を参照するDLLプロジェクト

また、これはWindows 7マシン上のVisual Studio 2008にあります。違いはないと思いますが、私はdll_testプロジェクトでこのソリューションを開始し、後でdll_testerプロジェクトを追加しました。

これを解決する方法を知っている人はいますか?

+0

だけ明確にするために、あなたは、プロパティ - >リンカー - >追加のライブラリディレクトリへ>リンカー - >入力し、そのパスをプロパティ - する** ** dll_test.libを追加しましたか? –

+0

いいえ、私はしませんでした。しかし、それはlibを作成するはずではない、それはdllを作成するはずです。 –

+0

DLLプロジェクトを静的に参照するには、ヘッダーファイル、DLLファイル*および対応するLIBファイルが必要です。実際のコードはもちろんDLLにありますが、リンカがDLLに静的にリンクできるようにLIBファイルが必要です。 DLLプロジェクトをコンパイルするとき、リンカはDLLファイルとそのLIBファイルを作成する必要があります。 –

答えて

1

ああ、Visual StudioでのDLLと依存関係の喜びをチェックされていることを確認してください。私はC#のプログラマーは簡単にそれを持って、誓う:)

あなたはLIBファイルが実際に作成されることが確実な?あなたのDLLプロジェクトがシンボルをエクスポートしない場合、あなたはlibファイルを取得せず、何もリンクされません。

  1. あなたのDLLプロジェクトがMYPROJECTNAME_EXPORTSのようなものを定義しています。だから、ことを確認する必要があります。 Visual Studioでは、プロジェクトの作成時に適切なチェックボックスをオンにすると、このシンボルが定義されます。あなたがこれをしなかったなら、それはとても簡単です。前述のシンボルは、あなたのDLLのためのプリプロセッサディレクティブにあることを確認し、共通のヘッダファイルに次のように定義されていることを確認してください。私たちはそのMYPROJECT_APIが適切に定義されていることを知っていたら、私たちは確認する必要があり

    #if defined(MYPROJECTNAME_EXPORTS) 
    #define MYPROJECT_API __declspec(dllexport) 
    #else 
    #define MYPROJECT_API __declspec(dllimport) 
    #endif 
    
  2. class MYPROJECT_API SomeClass 
    { 
    }; // eo class SomeClass 
    

そして、そのクラスが何かを実装し、実際にする必要があります:私たちはエクスポートする任意のクラスや関数は、それに宣言だと持っていることコンパイラは最適化されていません。要するに

何のシンボルは、それからエクスポートされなかったので、何も発生しなかったので、あなたは.libファイルを見つけることができない理由があります。

+0

素晴らしいです、ありがとうございます。私は何かを輸出することを忘れていたと信じられない:^) –

0

は右ソリューションエクスプローラでdll_testerをクリックして、見て、「プロジェクトの依存関係を...」とDLLプロジェクトが

関連する問題