
visual studio 2013 VC++を使用していますが、WINDOWSの関数に渡すためにCString からLPCTSTRに変換する必要があります。実際にどのようにするのかわかりません。
例えば、以下のサンプルは他の質問コーナーの回答をアレンジしたものです
CString str = _T("ABC");
int siz = str.GetLength()+1;
LPCTSTR pszFName = new TCHAR[siz];
_tcscpy_s( pszFName, siz, str );
で変換するのですが
LPCTSTRからwchar_t*へ変換できませんとエラーがでます
_tcscpy_s()は使用できないのでしょうか
No.4ベストアンサー
- 回答日時:
>APIはCStdioFile の Open()でファイル名を与えるところ
APIではないようですが……。
http://msdn.microsoft.com/ja-jp/library/ee247566 …
ならば、そのままCStringの変数渡せば、よろしく処理してくれると思いますけど。
No.5
- 回答日時:
(1)
LPTSTR pszFName = new TCHAR[siz];
// ↑ LPCTSTR ではなく LPTSTR
です。LPCTSTR は TCHAR const* で LPTSTR が TCHAR* です。つまり、LPCTSTR は "中身を書き換えられない文字列" で、_tcscpy_s の第一引数 TCHAR* (書き換えられる文字列) に渡す事はできません。
(2)
しかし、Windows の関数に渡すだけであれば変換する必要はなくて、ただ単に、str.GetBuffer() を Windows の関数の引数に指定するだけで良いと思います(寿命の問題がなければ)。
或いは、単に、
LPCTSTR pszFName = str.GetBuffer();
で、pszFName に str の中身が入ります。
(3)
あと、(文字コード) 変換が必要とか必要ないとか言う回答が挙がっていますが、
CString は TCHAR の文字列、
CStringA が char の文字列、
CStringW が wchar_t の文字列
ですので、CString と TCHAR/LPTSTR の間では、文字コード(Unicode <-> MBCS)変換は必要ありません。CString と LPSTR や LPWSTR の間の変換の方が寧ろ必要です。
因みに、Windows の API 関数は、文字列を受け取るどの関数も、TCHAR 版 (例: CreateFile) と char 版 (例: CreateFileA) と wchar_t 版 (例: CreateFileW) の 3 種類が全て定義されています (char/wchar_t 版は A/W を最後につけるだけ)。従って、文字型に応じて対応する版を選んで呼べばいいだけなので、Windows の API 関数を呼び出す為であれば文字コード変換はそもそも必要ないと思います。
No.3
- 回答日時:
_tcscpy_sはマクロ関数です。
_UNICODEマクロが定義されている場合はwcsncpy_s()に
_MBCSマクロが定義されている場合は_mbsnbcpy_s()に
どれも定義されていない場合はstrncpy_s()に
展開されます。
LPCTSTRは
_UNICODEマクロが定義されている場合はconst WCHAR*に
_UNICODEマクロが定義されていない場合はconst char*に
typedefされています。
_UNICODEマクロ、_MBCSマクロを正しく定義しないと、これらの関数は使えません。
なお、一般的には「_tcscpy_s()は使用すべきでない」とされています。きちんと処理したいならば、以下
http://msdn.microsoft.com/ja-jp/library/cc448053 …
のような、文字列変換用のAPI関数を用います。
int MultiByteToWideChar()の関数を参考にさせていただいたのですが、これは変換元がLPCSTRのようで、変換される結果ではないような気がするのですが
No.1
- 回答日時:
>WINDOWSの関数に渡すためにCString からLPCTSTRに変換する必要があります。
そのAPIの名前と、渡したい文字列の引数はどれになりますか?
APIが要求しているのがLPCSTRなら領域確保してコピーする必要はないと思いますが。
# LPTSTRだったら必要ですけど。
>LPCTSTRからwchar_t*へ変換できませんとエラーがでます
>_tcscpy_s()は使用できないのでしょうか
LPCTSTRは「書き換え不可(禁止)な文字列へのポインタ」です。
よって、_tcscpy_s()などでのコピー先に指定するのは不適切です。
# 書き換え禁止なのですからコピー「先」にはできません。コピー「元」なら可能ですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# 浮動小数の数値文字列化 1 2022/04/18 15:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
このQ&Aを見た人はこんなQ&Aも見ています
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
charからLPTSTRへの変換方法
C言語・C++・C#
-
-
4
CStringをwchar_tに変換したい
C言語・C++・C#
-
5
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
6
エディットボックスの入力制限について
C言語・C++・C#
-
7
画面を強制的に再描画させる方法
C言語・C++・C#
-
8
CString型 全角半角を意識せずに「1文字」ずつ取り出す
C言語・C++・C#
-
9
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
10
ラベル(スタティックテキスト)内での改行。
C言語・C++・C#
-
11
CStringをLPCTSTRへ変換
C言語・C++・C#
-
12
EDITコントロールで入力できる文字を制限するには?
C言語・C++・C#
-
13
CString型の文字列連結について
C言語・C++・C#
-
14
'int' から 'LPCSTR' に変換できません。
C言語・C++・C#
-
15
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
16
ビジュアルC++でボタンの有効/無効
C言語・C++・C#
-
17
MFCでコンボボックスを選択不可状態にしたい
C言語・C++・C#
-
18
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
19
LPSTR型の初期化について
C言語・C++・C#
-
20
ダイアログ表示時にチェックボックスにチェックされている状態にするには?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAでPDFファイルをMicro...
-
CString から LPCTSTRの型に変換
-
文字コードの%E3%80%とは何です...
-
SQLのデータで半角カナを全角に...
-
CString型からdouble型への変換
-
文字列を quoted-printable 文...
-
Encode.pmで「髙」(ハシゴ高)...
-
VBScript文字列をSJISからUTF8...
-
漢数字の変換
-
VB6にも「ToString」ってあり...
-
文字コードの変換によるレイア...
-
vbwide(半角⇒全角変換)について
-
MacからWindowsへiTunesのデー...
-
FSK微弱送受信モジュールF01A
-
五十音の並べ替えsortを教えて...
-
ファイル名の右側を変更したい ...
-
ローマ字文字列の半角←→全角変換
-
テキストをhtml変換するには
-
oracle10g eucのblobをsjisのch...
-
算用数字(半角)から漢数字へ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CString から LPCTSTRの型に変換
-
Excel VBAでPDFファイルをMicro...
-
文字コードの%E3%80%とは何です...
-
SQLのデータで半角カナを全角に...
-
CString型からdouble型への変換
-
VBScript文字列をSJISからUTF8...
-
ローマ字からカナに変換する方...
-
テキストをhtml変換するには
-
gccでiconvを使った文字コード...
-
SJIS->UTF8->SJISコード変換に...
-
エクセルでの漢字(全角ひらが...
-
文字列を quoted-printable 文...
-
VB6にも「ToString」ってあり...
-
VBScript 全角英数記号→半角英...
-
16進数の文字列を文章に変える
-
Delphiの型変換
-
文字列が勝手にエスケープ文字...
-
ウイザードからのVBAでクエリー...
-
【PHP】全角記号を半角記号...
-
文字コードの変換によるレイア...
おすすめ情報