掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
他アプリのツリーのノードタイトルを得るには? (ID:73173)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> VB6で記述したコードではうまくいきます。 正しく VB6 と C 違いに因る事で旨く動いていないと思われる。 実際に動作確認はしていないが、以下提示コードを見て気になった事。 まず TCHAR を正しく考慮できていない。TCHAR は開発プロジェクトの文字セットの違いによって下記の差が出る。 ・文字セットが Unicode ・TCHAR = WCHAR ・sizeof(TCHAR) == (VC++標準では)2Byte ・文字セットが Unicode 以外 ・TCHAR = char ・sizeof(TCHAR) == (VC++標準では)1Byte > long dwSize = sizeof(item) + MAXTEXTLEN; MAXTEXTLEN は”byteサイズ”では無く”文字数”を意味している。よって↓が正しい long dwSize = sizeof(item) + sizeof(TCHAR) * MAXTEXTLEN; > item.pszText =((LPTSTR)&pLocalShared)+sizeof(item); sizeof(TCHAR) == 2Byte の場合、↑は「item.pszText = (char*)&pLocalShared + sizeof(TCHAR) * sizeof(item)」となり sizeof(item) 一個分多く加算してしまう。 また「&pLocalShared」だと”[ポインタ変数 pLocalShared]が確保されている場所”になる。「&」不要かと。 というか、自プロセス内メモリを指す「pLocalShared」では無く、対象プロセスの「pSysShared」でないとダメなんじゃなかろうか。 この辺りがエラーの直接の原因のように思われる。 item.pszText = LPTSTR((char*)pSysShared + sizeof(item)); > ReadProcessMemory(hProcess,&pSysShared,&pLocalShared,MAXTEXTLEN,&dwNumberOfBytesRead); > MoveMemory(szBuffer,(&pLocalShared + sizeof(item)),MAXTEXTLEN); ReadProcessMemory(hProcess, pSysShared, pLocalShared, dwSize, &dwNumberOfBytesRead); MoveMemory(szBuffer, (char*)pLocalShared + sizeof(item), sizeof(TCHAR) * MAXTEXTLEN); > LPVOID pLocalShared; 最後に補足。今は pLocalShared を介して pSysShared とやり取りしているようだけど、多分コレ要らない。 WriteProcessMemory(hProcess, pSysShared, &item, dwSize, &dwNumberOfBytesWrite); て感じに直接「item」等を指定してやってもいけるんじゃないかな。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.