プロセスの作成中にいくつかの数値引数を渡しています (VC++ で)
LPTSTR を int に変換するのに行き詰まっています。
前もって感謝します。
LPTSTR は、char または wide-char 文字列へのロング ポインタです。
_ttoi
またはを使用_tstoi
して、文字幅に依存しない変換を行います。
こちらもご覧ください
ガック!正確に何をしようとしていますか?問題は親プロセス側(を呼び出すCreateProcess()
)ですか、それとも子プロセス側ですか?
関数によって作成された親プロセスから子プロセスにパラメーターを伝達する方法はいくつかありますCreateProcess()
。これらのパラメーターを適度なサイズの文字列としてエンコードできる場合は、コマンドラインパラメーター(lpCommandLine
CreateProcessのパラメーター)を介してパラメーターを渡すのがおそらく最も簡単で移植性が高く、環境変数が2番目です。
適度なサイズの文字列にエンコードできないデータ構造がある場合(大量のメモリであるか、簡単にシリアル化できないため)、プロセス間通信の何らかの方法に頼る必要があります。ファイルまたは共有メモリのブロックは、これを行う2つの方法です。いずれの場合も、子供がこれを見つけるための合意された場所(ファイルの場合はファイルパス、または共有メモリブロックの名前)を考え出し、この文字列をコマンドラインとして渡す必要がありますパラメータまたは環境変数。
lpCommandLine
子プロセス内でパラメーターを解析しようとしている場合、それは他の人が提案していることです。
atoi()
関数 (または、ワイド文字を使用している場合は適切なバージョン) を試して、文字列を整数に変換してください。
私のアドバイスは、_ttoi ではなく _tcstol のようなものを使用することです。これにより、文字列内の非数字などのエラー条件を処理できます。例えば:
int result = atoi("0");
result = atoi("foo");
どちらの場合も結果は 0 になりますが、2 番目の場合のみ変換でエラーが発生します。
LPTSTRは文字列へのポインタであるため、文字列の値を表すintが必要な場合は、それをintにキャストしないでください。
文字列に数字が含まれていることがわかっている場合(「1234」など)、_wtoi関数を使用して文字列をintに変換できるはずです。
例えば
int num = _wtoi(foo);
ここで、fooはLPTSTRです。
編集:上記は、LPTSTRがUNICODE文字列である場合にのみ正しく機能します。つまり、_UNICODEが定義されています。そうでない場合は、atoiを使用する必要があります。
http://msdn.microsoft.com/en-us/library/yd5xkb5c(VS.80).aspxを参照してください