2012-03-17 9 views
0

私はいくつかのコードをコンパイルしようとしているが、私はエラーを取得しています:無効な変換「のconstのchar *」

Error invalid conversion from DWORD to const char *

ここで私がコンパイルしようとしているコードです。

hWindow = FindWindow(NULL, "Window");  
if (hWindow){ 
    GetWindowThreadProcessId(hWindow, &pid); 
} 
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); 
if(hProcess != NULL) { 
    SetWindowText(GetDlgItem(MyWindow, MyStatic), pid); 
} 

DWORDconst char *に変換するにはどうすればよいですか?

+0

エラーの原因は次のうちどれですか? –

+0

SetWindowText(GetDlgItem(MyWindow、MyStatic)、pid); pidはエラーを引き起こします。ここではdwordsを使用することはできません。 – Tprice88

答えて

1

をこの行で

SetWindowText(GetDlgItem(MyWindow, MyStatic), pid); 

pid(あなたは2番目の引数としてLPDWORDをとるGetWindowThreadProcessId(hWindow, &pid)でそれを使用されるような)DWORDです。ただし、SetWindowTextはC文字列を第2引数として受け取るため、pidではなく、char *またはchar []の値を渡す必要があります。あなたがstrのサイズを少し変更する必要があり

char * str = new char[10]; 
sprintf(str,"%d",pid); 

(10が小さすぎる、または必要以上に大きくなるかもしれない - それは最高です:

pidの値を表示するには、あなたがsprintfを利用することができますあなたとあなたの状況に)。

+0

あなたは、文字列の蒸気を使わずにこれを行う良い方法を知っています。ベンは永遠に試しています。 – Tprice88

+0

@ user1218395: 'sprintf'の例が追加されました。 –

+0

初期化時に 'char **'を 'char *'に変換できません。あなたの最初の行が好きではない – Tprice88

4

SetWindowTextconst char *(つまりC文字列)が必要で、数字(pid)を渡すと間違いがあることは明らかです。

変換を実行するために、標準C++の方法は、ヘッダ<sstream>から文字列ストリーム(使用することです:

std::ostringstream os; 
os<<pid; 
SetDlgItemText(MyWindow, MyStatic, os.str().c_str()); 

を(ここで私が入力する手間を省くためにSetDlgItemText代わりのGetDlgItem + SetWindowTextを使用しますが、それは同じことです)

また、あなたはsnprintfを使用することができます。

char buffer[40]; 
snprintf(buffer, sizeof(buffer), "%u", pid); 
SetDlgItemText(MyWindow, MyStatic, buffer); 
+0

他の方法で文字列ストリームを使用する#include は私の出力を大きくします – Tprice88

+0

何を出力していますか?あなたは最終的な実行可能なサイズについて話していますか?コンパイラで最適化を有効にしましたか(=「リリースモード」など)? –

+0

はい私はGCCのバグかもしれないと思うが、リリースモードでstipのデバッグとすべての最適化を使っているyah im私の最終的なexeはsstreamなしで450kb、それと450kbだ。 – Tprice88

関連する問題