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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

Q&A

解決済

1回答

12452閲覧

Visual Studio 2019でdebugはできるが、releaseができない件について

kihara-shinken

総合スコア6

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

0グッド

0クリップ

投稿2019/10/21 11:32

相談内容

C++プログラミング初心者です。
現在テトリスをプログラミングしているのですが、
なんとかVisual studio 2019 でdebugすることができましたが(https://teratail.com/questions/218451 のdodox86様のおかげです)、releaseすることができません。
windows 7/64bit の環境では問題なくrelease できたようですが、windows 10/64bitだと39個エラーを吐き出してしまい、releaseができないようです。ご回答いただけると幸いです。足りない情報があれば、ご指摘いただければ追加いたします。

参考にしているサイト

http://www13.plala.or.jp/kymats/study/game_other/SPACE_TETRIS/st1.html
https://teratail.com/questions/218451

ソースコード

http://www13.plala.or.jp/kymats/program/SPACE_TETRIS/SPACE_TETRIS.cpp

エラー内容(39個)

エラー C2664 'HANDLE OpenMutexW(DWORD,BOOL,LPCWSTR)': 引数 3 を 'const char [28]' から 'LPCWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 320
エラー C2664 'int MessageBoxW(HWND,LPCWSTR,LPCWSTR,UINT)': 引数 2 を 'const char [120]' から 'LPCWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 358
エラー C2664 'int wsprintfW(LPWSTR,LPCWSTR,...)': 引数 1 を 'char [32]' から 'LPWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 433
エラー C2664 'BOOL TextOutW(HDC,int,int,LPCWSTR,int)': 引数 4 を 'char [32]' から 'LPCWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 434
エラー C2664 'int wsprintfW(LPWSTR,LPCWSTR,...)': 引数 1 を 'char [32]' から 'LPWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 435
エラー C2664 'BOOL TextOutW(HDC,int,int,LPCWSTR,int)': 引数 4 を 'char [32]' から 'LPCWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 436
エラー C2664 'int wsprintfW(LPWSTR,LPCWSTR,...)': 引数 1 を 'char [32]' から 'LPWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 438
エラー C2664 'BOOL TextOutW(HDC,int,int,LPCWSTR,int)': 引数 4 を 'char [32]' から 'LPCWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 439
エラー C2664 'int wsprintfW(LPWSTR,LPCWSTR,...)': 引数 1 を 'char [32]' から 'LPWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 440
エラー C2664 'BOOL TextOutW(HDC,int,int,LPCWSTR,int)': 引数 4 を 'char [32]' から 'LPCWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 441
エラー C2664 'HANDLE LoadImageW(HINSTANCE,LPCWSTR,UINT,int,int,UINT)': 引数 2 を 'const char [14]' から 'LPCWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 478
エラー C2664 'int MessageBoxW(HWND,LPCWSTR,LPCWSTR,UINT)': 引数 2 を 'const char [23]' から 'LPCWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 481
エラー C2664 'HANDLE CreateMutexW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR)': 引数 3 を 'const char [28]' から 'LPCWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 499
エラー C2664 'int MessageBoxW(HWND,LPCWSTR,LPCWSTR,UINT)': 引数 2 を 'const char [23]' から 'LPCWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 540
エラー C2440 '=': 'const char [55]' から 'LPCWSTR' に変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 573
エラー C2664 'HWND CreateWindowExW(DWORD,LPCWSTR,LPCWSTR,DWORD,int,int,int,int,HWND,HMENU,HINSTANCE,LPVOID)': 引数 2 を 'const char [55]' から 'LPCWSTR' へ変換できません。 tetris3 C:\Users\User\source\repos\tetris3\tetris3\tetris3.cpp 581

ソースコード (文字数制限のため一部のみ)

#include<time.h> // winmm.lib をリンクする #pragma comment(lib,"winmm") // エラー #define ERR -1 // ピースの横と縦のマス数 #define PIECE_WIDTH 4 #define PIECE_HEIGHT 4 /* フィールドの横と縦のマス数 */ #define FIELD_WIDTH 14 #define FIELD_HEIGHT 24 // マスのピクセル数 #define CELL_WIDTH 20 #define CELL_HEIGHT 20 /* MovePiece 関数の引数 */ #define PIECE_LEFT 2 #define PIECE_RIGHT 4 #define PIECE_DOWN 8 BYTE field[FIELD_WIDTH][FIELD_HEIGHT] = { 0 }; /* ゲームフィールド */ DWORD fColor[FIELD_WIDTH][FIELD_HEIGHT] = { 0 }; // ゲームフィールドの色 BYTE piece[PIECE_WIDTH][PIECE_HEIGHT] = { 0 }; /* 現在移動中のブロック */ DWORD pColor[PIECE_WIDTH][PIECE_HEIGHT] = { 0 }; // 現在移動中のブロックの色 POINT location = { 0,0 }; /* 現在移動中のブロックの位置 */

環境

windows 10 home 64bit,プロジェクトの設定は「Windows デスクトップアプリケーション - C++」を使用しています。

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

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

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

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

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

dodox86

2019/10/21 11:54 編集

ああ、そういう意味でしたか。実行時エラーの話かと思いました。コンパイルオプションの問題です。「39エラーって何のことだろう??」と思ってました。回答します。
kihara-shinken

2019/10/21 11:58

>dodox86様 たびたび申し訳ございません。 よろしくお願いします。
dodox86

2019/10/21 12:26 編集

先の質問回答にも足りないところがあったので、少し追記しました。
guest

回答1

0

ベストアンサー

DebugビルドでもReleaseビルドでも、プロジェクトの設定において**「文字セット」設定項目で「マルチバイト文字セットを使用する」**を指定してください。

例えば以下のようなエラー

C2664 ... 引数 1 を 'char [32]' から 'LPWSTR' へ変換できません。 ...

は、char型の配列(ポインター)からWCHAR型の配列(ポインター)に変換できないと言っています。

MessageBoxTextOut、その他多くの文字列へのポインターを引数とする関数は、WCHAR/ワイド文字(UTF16)用とchar/ANSI文字の2種類があり、コンパイルオプションによってワイド文字用とANSI文字用に自動的に切り替わります。(例:MessageBoxであれば、MessageBoxWをワイド文字用、MessageBoxAをANSI文字用として使います)

サンプルのコードは文字列配列として"hogehoge"のようなANSI文字列、シフトJISであればマルチバイト文字列として取り扱っています。プロジェクトの設定の既定ではUNICODE文字セット、つまりワイド文字セットなので不一致が起き、コンパイルエラーが発生するわけです。

投稿2019/10/21 12:25

dodox86

総合スコア9183

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

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

kihara-shinken

2019/10/21 12:43

>dodox86様 ありがとうございます。 明日朝からプログラム走らせて試してみます。 本日は何から何までありがとうございました。 感謝いくらしてもしきれません。
dodox86

2019/10/21 12:46

まぁ、Windowsプログラミング特有の話も多いですからね。C++と言う「プログラミング言語」に注力して勉強をされたい場合は、切り分けて考えることをお勧めします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問