電子書籍の厳選無料作品が豊富!

MENUITEMINFO menuInfo;
char * str = "aaaaaaa";
menuInfo.dwTypeData = _T(str);//※
もしくは
menuInfo.dwTypeData = TEXT(str);//※

上記の※部分のように_TやTEXTマクロに変数を使用したいのですが、
どのようにしたらよいのでしょうか?

お力添えをお願いします。

A 回答 (3件)

> 関数化した下記のコードが2回以上走ると※部分の


> 長さ取得するところで処理が返ってこなくなります

あなたのミスでしょう。
コレ↓はちゃんと動作しますから。

#include <windows.h>
#include <iostream>
#include <locale>
#include <cstdlib>

using namespace std;

wchar_t* conv(const char* str) {
int len = 0;
wchar_t * buf;
len = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, NULL, 0);//※
buf = (wchar_t *)malloc(len);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, buf, len);
return buf;
}

int main() {
const char* input = "日本ちゃちゃちゃ";
wcout.imbue(locale("japanese"));
for ( int i = 0; i < 10; ++i ) {
wchar_t* output = conv(input);
wcout << output << endl;
free(output);
}
}
    • good
    • 0
この回答へのお礼

ありがとうございます

デバックで追っていったところ
ポインタの初期化ミスでした。

的確なアドバイスと的確なご指摘ありがとうございました。

Cをやり始めて3日目で日頃は
C以外のデフォルトUnicode環境な言語を
使用していましたのでつまづいてしまいました。
(初期化ミスは論外ですが。。。。(汗))

multibyte と widecharの違いも初めて知ることができました。

ここをクリアしたのであとは
メモリ管理には気をつけてプログラムを組んでいきます。

本当にありがとうございました。
またつまづいた時はお力添えをお願いします。

お礼日時:2011/04/10 15:47

できません。



MultiByteToWideChar で変換します。

参考URL:http://msdn.microsoft.com/ja-jp/library/cc448053 …

この回答への補足

回答ありがとうございます
アドバイス通り下記のようにしてみたのですが、
関数化した下記のコードが2回以上走ると※部分の
長さ取得するところで処理が返ってこなくなります

void conv (char * str) {
int len = 0;
wchar_t * buf;

len = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, NULL, 0);//※
buf = (wchar_t *)malloc(len);
if (buf == NULL) {
return;
}
MultiByteToWideChar(
CP_ACP,
MB_PRECOMPOSED,
clipStruct -> clip,
-1,
buf,
len);

//以下bufを使用した処理
}

補足日時:2011/04/10 11:47
    • good
    • 0

それはできないと思いますけど…。


普通は

LPTSTR str = _T("aaaaa");

とか

TCHAR *str = _T("aaaaa");

みたいにしておいて

menuinfo.xxxxx = str;

のようにすると思いますが、そういうのはダメなんでしょうか?

この回答への補足

回答ありがとうございます

メニューに表示するテキストが
リテラルにできるようなものでなく、
入力によるものなので
変数となってしまいます。

補足日時:2011/04/10 02:14
    • good
    • 0

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