質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

4177閲覧

C++でWin32APIのFileDialogを実装したい

20020120

総合スコア9

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/07/07 12:38

前提・実現したいこと

VisualStudio2019でWindowsのファイルダイアログシステムを使ってファイルを開けたい

ファイルダイアログのを実装したいのですが、その実装中にGetOpenFileName(OPENFILENAME)の呼び出し部分でリンカーエラーが出てしまいサンプルコードを見たり調べたのですがわかりません。
よければ教えてください

発生している問題・エラーメッセージ

error LNK2019: 未解決の外部シンボル imp_GetOpenFileNameW が関数 "public: int cdecl FileDialog::OpenFile(struct HWND *)" (?OpenFile@FileDialog@@QEAAHPEAUHWND@@@Z) で参照されました
1>D:\Workspace\ModelViewe\x64\Debug\3dgp.exe : fatal error LNK1120: 1 件の未解決の外部参照

該当のソースコード

C++

1 2#include<windows.h> 3 4class FileDialog 5{ 6public: 7 FileDialog(){}; 8 ~FileDialog(){}; 9 10 11public: 12 13 //--------------------<ファイルを開く>--------------------// 14 bool OpenFile(HWND hwnd); 15 16private: 17 /* char path[MAX_PATH]{}; 18 char filename[MAX_PATH]{}; 19 char mes[1024]{};*/ 20}; 21 22 23 24bool FileDialog::OpenFile(HWND hwnd) 25{ 26 27 OPENFILENAME ofn{}; 28 TCHAR szPath[MAX_PATH]{}; 29 TCHAR szFile[MAX_PATH]{}; 30 31 if (szPath[0] == TEXT('\0')) { 32 GetCurrentDirectory(MAX_PATH, szPath); 33 } 34 35 if (ofn.lStructSize == 0) { 36 ofn.lStructSize = sizeof(OPENFILENAME); 37 ofn.hwndOwner = hwnd; 38 ofn.lpstrInitialDir = szPath; // 初期フォルダ位置 39 ofn.lpstrFile = szFile; // 選択ファイル格納 40 ofn.nMaxFile = MAX_PATH; 41 ofn.lpstrFilter = TEXT("MP3/M3Uファイル(*.mp3,*.m3u)\0*.mp3;*.m3u\0") 42 TEXT("MP3ファイル(*.mp3)\0*.mp3\0") 43 TEXT("M3Uファイル(*.m3u)\0*.m3u\0") 44 TEXT("すべてのファイル(*.*)\0*.*\0"); 45 ofn.lpstrTitle = TEXT("音楽ファイルを選択します。"); 46 ofn.Flags = OFN_FILEMUSTEXIST; 47 } 48 49 50 return GetOpenFileName(&ofn); 51} 52

試したこと

サンプルコード(下記URL)を参照しました
https://blog.goo.ne.jp/masaki_goo_2006/e/930c4be856eae4556e1367f0125ec63b

補足情報(FW/ツールのバージョンなど)

ライブラリはDirectX11を使用しています

FileDialogクラスはシングルトンパターンのほかのクラスのメンバでそのクラスのコンストラクタで生成しています

WinAPIWrapper::WinAPIWrapper()
{
filedialog = new FileDialog();
}

WinAPIWrapper::~WinAPIWrapper()
{
delete filedialog;
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2021/07/07 13:15

まず、どのような環境でしょうか。 OSバージョン、IDE or コンパイラ…… そういうので相当違います。 VC++を使っているのなら VC++のバージョン ( 例: VC++ 2010 ) 、 MinGW とかを使っているのなら『MinGW gcc (バージョン)』とかのように書いてください。 VC++の場合とMinGWの場合は相当違います。
guest

回答2

0

ベストアンサー

まずエラーコードを検索しましょう。

リンカ ツール エラー LNK2019

で、今回の場合は

シンボルの定義を含むオブジェクト ファイルまたはライブラリがリンクされていない

このVisual Studio、シンボル定義を含むオブジェクト ファイルまたはライブラリがプロジェクトの一部としてリンクされている必要があります。 コマンド ラインで、リンクするファイルの一覧にオブジェクト ファイルまたはライブラリが含まれる必要があります。

これです。
imp_GetOpenFileNameW というWinAPIっぽい名前がエラーに出てきているので、今度はGetOpenFileNameW のAPIリファレンスを検索してみましょう。

GetOpenFileNameW function (commdlg.h)

Requirements
(中略)
Library Comdlg32.lib

LibraryにComdlg32.libが必要だと書いてありますね。
プロジェクトの設定を変更するか、pragma指定するかのどちらかでComdlg32.libをリンクしましょう。

[VC++] リンクするライブラリファイルをソースコード内に記述する

エラーは問題解決のヒントなので、とりあえずエラーコードやエラーメッセージで検索する癖をつけると早い解決に繋がります。

投稿2021/07/07 13:35

編集2021/07/07 13:48
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

20020120

2021/07/08 05:26

解決できました。 エラーの解決の手順まで丁寧に教えていただきありがとうございます。 これからはエラーメッセージなどで検索して自力で解決できるように頑張ります
guest

0

投稿2021/07/07 12:52

nekora

総合スコア501

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekora

2021/07/07 12:52

回答が役になったなら回答の横の数字をポイントすると回答の評価の増減ができます。 また解決につながった回答はベストアンサーに指定できます。 この設定は個別に指定できます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問