2016-07-03 317 views
-1

は、私は彼らの拡張子でファイルを分類するための簡単なプログラムを作りたかったが、コンパイルしようとしたときにエラーVisual StudioでC++ shlwapiライブラリを使用するにはどうすればよいですか?

重大度コード説明プロジェクトファイルのラインエラーLNK2019未解決 外部シンボル__imp__PathFileExistsW @ 4機能で参照「のボイドを得ました(?classifyFiles @@ YAXXZ):

void classifyFiles() { 
    for (int i = 0; i < files.max_size(); i++) { 
     //if each folder doesn't exist, create folder 
     LPCWSTR folderName = (L"\\" + extensions.at(i)).c_str(); 
     if (!PathFileExistsW(folderName)) { 
      CreateDirectory(folderName, NULL); 
     }; 
     LPCWSTR destination = (extensions.at(i) + files.at(i)).c_str(); 
     //move file 
     MoveFile(files.at(i).c_str(), destination); 
    } 
} 
__cdecl classifyFiles(無効)」

私のコードがあるPathFileExistsが呼び出され、このです

私はちょっとグーグルで、Shlwapi.hヘッダーを含めては不十分で、ライブラリをリンクする必要があるようです。しかし、私はVisual Studioでそれを行う方法についての答えを見つけることができません。

注:私はまた、それぞれのメニューとすべて(これはVisual Studioで初めてのことです)が問題であることを知っていますので、可能であればスクリーンショットを見つけてください。

参考文献:https://msdn.microsoft.com/en-us/library/windows/desktop/bb773584(v=vs.85).aspx

+0

[この質問を参照](http://stackoverflow.com/questions/20058864/how-to-include-libraries-in-visual-studio-2012) – meJustAndrew

+0

@meJustAndrewこれは頭痛です。私は窓からファイルをダウンロードする場所を見つけることができないので、私はそれをする必要はありません。私はXのウェブサイトからダウンロードしなければならない。ライブラリのディレクトリに新しい行を作成しますが、画面に表示されないため、dllを設定できません。このshlwapiライブラリを動作させるために私は何をすべきですか? – Carlos

+0

私は問題を解決しました。問題は私がIFを使っていたことでした。あなたは、BOOL型では使用できません。奇妙な追加構成を追加する必要はありません。 – Carlos

答えて

0

まず、あなたは、あなたは、リンカの入力を設定する必要がadd VC++ directories する必要があります。含まれた後
#pragma comment(lib, "Shlwapi.lib")
を追加 :

0

は、成功するために、私は、ビルドのためにした二つのものがあります。 私の具体的なケースでは、次のコード行を変更するのは何らかの理由で同じであっても違いがありました。変更:

if (!PathFileExistsW(folderName)) 

へ:

if (PathFileExistsW(folderName) == FALSE) 

最初のようなPathFileExistsの値を使用していくつかの理由は、他のすべてが順序であってもリンクエラーを出力します。翌日、私はもう一度それをテストし、それは両方の方法で働いた。多分それは私の想像力であり、間違いをしていたかもしれません。

+1

実際には、常に偽の条件が0(FALSEは定数0)なので、常にFALSEと比較したいと考えています。真の条件は、*任意の*非ゼロ値であってもよく、必ずしもTRUEでなくてもよい(定数1)。あなたが「間違っている」と言うオリジナルのコードは、実際にはうまいですし、慣用的なC++です。 –

+0

**リンカディレクティブはどこに置いても問題ありません。結局のところ、リンカーの設定です。コンパイラは、それがどこにあるかにかかわらず、オブジェクトコードにそれを出力します。 – IInspectable

+0

'BOOL'値に'! 'vs' == FALSE'を使うこととの違いは*ありません。どちらを使用する場合でも、リンカには何も影響しません。 '! 'は、ゼロを偽と正しく解釈し、非ゼロを真と解釈します。この関数は、ファイルが存在すれば "* TRUE"を返し、そうでなければFALSE *を返すとして明確に文書化されています。それ以外の値は返されません。 '!'は 'BOOL'を返すすべてのAPIでうまく動作します。 –

関連する問題