windowsプログラムで文字化けする理由とは?
- windowsプログラムに興味を持ち、サンプルコードをVC++2008でコンパイル実行した際に文字化けする理由や原因を解説します。
- サンプルコードのメッセージボックスでの文字表示に関する問題やエラーについても触れます。
- また、拡張子cppとcの違いについても説明します。初心者でもわかりやすく解説します。
- ベストアンサー
windowsプログラム、文字化けする
windowsプログラム、文字化けする 最近になってwindowsプログラムに興味を持ってやってみようと思い サイトでいざ勉強しようと思ったんですが、サンプルコードをVC++2008で コンパイル実行してみると、すべて文字化けしています。なぜでしょう ちなみにOSはXP、サンプルコードてのが #include <windows.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBox(NULL, "Hello World!", "メッセージ", MB_OK); return 0; } メッセージボックスでの文字表示のサンプルみたいですがどうもうまくいきません もう1つ このサンプルをソースファイルの拡張子cppでやるとエラーがでるんですがcだと警告が出るだけなんですが これはいったいなんででしょうか。 すみません、最近こういう勉強を始めたばかりなので。
- korosiya123
- お礼率27% (23/84)
- C・C++・C#
- 回答数1
- ありがとう数5
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>MessageBox(NULL, "Hello World!", "メッセージ", MB_OK); ソリューションとかプロジェクトを作成していると思いますが… 文字セットがUNICODEに設定されているのにMBCSの文字列を設定しているので cppでエラーになっていたのではないですか? エラーメッセージを掲示された方がよいかと思いますが… プロジェクトの設定をMBCSに設定するか、UNICODEでの正しい書き方をするか…のどちらかになります。 ネットや書籍など少し古い情報を参照する場合、MBCSに設定した方がそのままコピペでも扱えます。 # ただしプロジェクトを作るたびに設定変更が必要です。 UNICODEでの書き方に変更する場合は、ネットや書籍などの情報は読み替える必要があります。 # MBCS前提で解説されているところは結果が異なる場合があります。 ・MBCSに設定を変える方法 [プロジェクト]-[プロパティ]で「プロパティページ」が表示されるのので、 「構成プロパティ」を選択、右側の「文字セット」を「マルチ バイト文字セットを使用する」に変更して[OK]で閉じてからリビルド。 ・UNICODEの書き方に変更する とりあえず、「"~"」になっているところを「_T("~")」に書き換える。 正確な書き方についてはヘルプなどに記載されていますのでそちらを参照してください。
関連するQ&A
- HINSTANCEの型
LPSTR は char* なので、 int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance , LPSTR lpCmdLine ,int nCmdShow ) を int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance , char* lpCmdLine ,int nCmdShow ) と書き換えてもコンパイルできます。 HINSTANCEはvoid *型だという記述を見たのですが、void *で書き換えてもエラーがでてしまいます。 どうしたらよいのでしょうか。
- ベストアンサー
- C・C++・C#
- spawnl
#include "stdafx.h" #include <process.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // TODO: この位置にコードを記述してください。 _spawnl(_P_WAIT, "chkbook.exe",...); return 0; } 上のようにして、MFCサンプルの ckhbook.exe (引数はありません。) を呼び出そうとしましたが、上手く動きません。 どのように修正すれば良いのでしょうか? コンソールプログラムの場合は、 簡単に呼び出せます。 よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- 画像が出力されません
画像出力するには int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); から引数"lpCmdLine"を使うことにより画像が出力できる事を聞いたのですが本当でしょうか? うまく出力できません どのようにしたらよいのか具体的にソースをつけて教えてください。 画像はraw画像で出力します
- 締切済み
- C・C++・C#
- 外部シンボル "_main"は未解決です
「LIBC.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です」というエラーが発生しましたが、何をみればいいのかわかりません。int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )がソースについています。
- ベストアンサー
- C・C++・C#
- VS2019でWinMainエラー発生
以下メッセージを表示するだけのプログラムですが、以前はビルドできたのですが、VS2019になってからWinMainで「整合性のないインスタンス・・・」とエラーが出ます。なんででしょうか。 お願いします。 またVCをVBSみたいに黒い画面が出ずに引数を使用したいですが、その他アドバイスもお願いします。 #include <windows.h> int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { MessageBox( NULL, TEXT("Hello, world!"), TEXT("Hello"), MB_OK | MB_ICONINFORMATION ); return 0; }
- ベストアンサー
- C・C++・C#
- DEVICECHANGE() の受け取り
常駐し、USBメモリなど追加された場合を検出したいです。 どうしたらいいでしょうか? 次のソースでwin32空きプロジェクトを作成します。 #include<windows.h> int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { return 0; } ON_WM_DEVICECHANGE() というメッセージを受け取るそうですがどうしたらいいでしょうか? 例えば、USBドライブを検出した場合、メッセージを表示するようにしたいです。
- ベストアンサー
- C・C++・C#
- lpCmdLineについて
#include<windows.h> int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL , lpCmdLine , TEXT("Kitty") , MB_ICONINFORMATION); return 0; } とやったのですが、lpCmdLineのパスが表示されません。なぜでしょうか?
- 締切済み
- C・C++・C#
- Windowsゲームプログラミングを始めたのですが
最近ゲームのプログラムを始めた者です。 C言語でWindowsプログラムを書き始めたのですが、最初の宣言を行った時点でコンパイル時に大量のエラーが出てしまいました。 ↓が内容です。 #include<windows.h> #include<stdio.h> #include<stdlib.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ } 使用OSはVistaです。 急いではいないので、どなたか解決法を知っている方、ご指導お願いします。
- ベストアンサー
- C・C++・C#
- VS2010 C++ エラーについて
Visual Studio2010のC++を使用しているのですが、DLLにメッセージボックスを使用したいと思っています。 .cppに #include <windows.h> int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance , LPSTR lpCmdLine, int cmdShow) { MessageBox(NULL,"○○○","△△△",MB_OK); return 0; } 上記のようなソースコードを使って見ると、○○○と△△△の部分でエラーを吐きます。 どのようにすれば改善されるか教えてください。
- ベストアンサー
- C・C++・C#
- コンパイルできません
#include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ MessageBox(NULL, "Kitty on your lap","メッセージです", MB_OK); return 0; } の様なプログラムを組んだところ Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) の様にエラーになってしまいました。 どんな理由でエラーになっているのか調べたのですがよくわかりません。 一番初めのwin32APIを使ったプログラムで上手くコンパイルできないと 勉強が進まないので、わかる方教えてください。
- ベストアンサー
- C・C++・C#
お礼
ありがとうございました 回答者さんのおっしゃった通りでした。 MBCSに設定するとエラーメッセージが出なくなり 疑問がすべて解決しました、これからは _T("~") の書き方を覚えておきたいと思います