2010-12-12 16 views
0

こんにちは 私はC++開発者ではなく、他の誰かのアプリケーションをコンパイルしようとしています。ビルドは成功しますが、私は5つの '一貫性のないdllリンケージ'の警告を受け取ります。他の人のvs C++ appをコンパイルする - 矛盾したリンケージ

dllは作成されますが、既存のdllと同じシナリオでは機能しません。コードの変更はありません。いくつかのグーグル後

は、私は、ヘッダファイルで見つかった、それはこれに関係していると仮定します。

#ifdef CPLAPPLET_PROGRAM_EXPORTS 
#define CPLAPPLET_PROGRAM_API __declspec(dllexport) 
#else 
#define CPLAPPLET_PROGRAM_API __declspec(dllimport) 
#endif 

とCPLAPPLET_PROGRAM_EXPORTSがコマンドラインで定義されていると言うのコード内のコメントがあります。

の警告は、エクスポート機能に起こる、このように:

HRESULT _stdcall CCplApplet_PROGRAM::DllUnregisterServer() 
{ 
// our code added here 
    return 0; 
} 

誰かがここでは正しい方向に私を指すことができますか?

ありがとうございました。コメントに対処するための

EDIT:

私はVS 2008でのC++のWin32 DLLプロジェクトを作成している、と私は彼らの.cppファイルを追加しました、.H、このプロジェクトに.DEFファイルが、それがすべてです。単に 'build'をクリックするのではなく、.defファイルなどで具体的に何かする必要があるのだろうかと思います。

ヘッダファイルはそうのようなメソッドを定義しています

class CPLAPPLET_LNK_PROGRAM CCplApplet_PROGRAM { 
public: 
static LONG APIENTRY CPlApplet(HWND hWnd, UINT uMsg, LONG lParam1, LONG lParam2); 

private: 
... 
HRESULT _stdcall DllUnregisterServer(void); 
...  
    }; 

.defファイル:

LIBRARY "CplApplet_PROGRAM" 

EXPORTS DllUnregisterServer PRIVATE 
+0

ソリューションを構築していますか?リンク行の.defファイル指定を失った可能性はありますか? – Rup

+0

'DllUnregisterServer'はヘッダファイルにどのように定義されていますか?ヘッダーファイルで 'class CPLAPPLET_PROGRAM_API CCplApplet_PROGRAM ...'を使用しますか?また、VSからビルドする場合は、フラグが定義されていますか? – Asha

+0

ありがとうございます - 私はこれらの質問に対処するために編集しました。アシャ、あなたはどんな旗を言いましたか? –

答えて

3

右クリックし、[ソリューションエクスプローラ]ウィンドウ、[プロパティでプロジェクトを。構成プロパティ、C/C++、プリプロセッサ、プリプロセッサ定義の設定。 CPLAPPLET_PROGRAM_EXPORTSが表示されていることを確認します。あなたがしない場合は、それを追加します。

エクスポートファイルの名前が変更されるように.defファイルが必要になる可能性が非常に高いです。それがプロジェクトのファイルリストに存在することを確認してください。ビルド後、生成されたDLLでDumpbin.exe/exportsを使用し、エクスポートが存在し、追加文字なしで "DllUnregisterServer"のスペルが正しいことを確認します。作者の助けを必要とすることはほとんどありませんが、COMの輸出が扱われるように見える方法はかなり標準的ではありません。

+0

は華麗です! – rostamn739