プロが教えるわが家の防犯対策術!

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;
}
上記のようなソースコードを使って見ると、○○○と△△△の部分でエラーを吐きます。
どのようにすれば改善されるか教えてください。

「VS2010 C++ エラーについて」の質問画像

A 回答 (5件)

>C2731: 'WinMain' : 関数はオーバーロードできません。



添付されている画像のWinMain()の第3引数の型が違います。
LPSTRのハズです。
# wWinMain()ならLPWSTR。

>C3861: '_T': 識別子が見つかりませんでした

tchar.hが必要でした。
    • good
    • 0
この回答へのお礼

出来ました!
ありがとうございます!

お礼日時:2011/06/07 12:13

「Visual Studio 2010 文字セット」辺りで検索して下さい。



>MessageBox(NULL,"○○○","△△△",MB_OK);
でやるならば、「マルチ バイト文字セットを使用する」にした方がいいでしょう。

MessageBox(NULL,_T("○○○"),_T("△△△"),MB_OK);
とかであれば…よろしく処理してくれるかと。

http://msdn.microsoft.com/ja-jp/library/ey142t48 …


DLLにした場合も、文字列を扱う場合は「マルチ バイト文字セット」か「UNICODE文字セット」かを意識する必要があります。
# Win32APIだと…MessageBoxA()とMessageBoxW()みたいな関係。

この回答への補足

MessageBox(NULL,"○○○","△△△",MB_OK);

MessageBox(NULL,_T("○○○"),_T("△△△"),MB_OK);
に変更してみたのですが、今度は _T の部分でエラーを吐きます;

以下エラー文
C2731: 'WinMain' : 関数はオーバーロードできません。
C3861: '_T': 識別子が見つかりませんでした

補足日時:2011/06/07 11:58
    • good
    • 0

プロジェクトの設定がUNICODE使用するようになっているため、MessageBoxの引数として渡す文字列がUNICODE文字列じゃないと型が不一致と判断されます。



プロジェクトの設定をマルチバイト文字にするか、文字列をUNICODEにしましょう。

UNICODE文字列リテラルは

L"あいうえお"

のように表記します。
プロジェクトの設定によりマルチバイト文字列とUNICODE文字列を自動で切り替えたい場合は、

TEXT("あいうえお")

または

_T("あいうえお")

というマクロを使用します。
    • good
    • 0

エラーメッセージが何を言っているのかを理解してください.

    • good
    • 0

まず英語で通るか試してみてください。

この回答への補足

英語で試して見ましたがダメでした;

補足日時:2011/06/07 11:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!