qt - QLabel でメモリ アドレスを表示するにはどうすればよいですか?

okwaves2024-01-25  7

QLabel にメモリ アドレスを表示したいと考えていました。次のコードをコンパイルすると、エラーが発生します。

// Allocate space for our DLL path inside the target remote process.
            LPVOID dll_path_in_remote_mem_addr = VirtualAllocEx(
                        target_process,
                        NULL,
                        _MAX_PATH,
                        MEM_RESERVE | MEM_COMMIT,
                        PAGE_EXECUTE_READWRITE
                        );

            if (dll_path_in_remote_mem_addr == NULL) {
                QMessageBox::warning(this, "Failed OPS", "Allocating space for our DLL path in the remote target process's virtual memory space failed...");
                CloseHandle(target_process);
            }
            else
            {
                ui->labelDllAllocationAddress->setText(&dll_path_in_remote_mem_addr);
            }

コンパイルプロセスの後、次のエラーが表示されます:

エラー: C2664: 'void QLabel::setText(const QString &)': 引数 1 を 'LPVOID *' から 'const QString &' に変換できません

QLabel のようなウィジェットで LPVOID タイプのメモリ アドレスを表示するにはどうすればよいですか?



------------------------

まず、アドレスを QString 型に変換する必要があります。これはアドレスなので、おそらく 16 進形式で表示したいでしょう:

編集: LPVOID 値は暗黙的に int にキャストされないため、自分で行う必要があります。 編集2 : long 型はポインターを保持できるほど大きくないため (64 ビット マシン)、long long を使用する必要があります。

unsigned long address = reinterpret_cast<long long>(dll_path_);
QString addressInTextValue = QString("%1").arg(address, 0, 16);

これはここに文書化されています: https://doc.qt.io/qt-5/qstring.html

4

次のエラーが表示されます: エラー: C2664: 'QString QString::arg(const QString &,const QString &,const QString &,const QString &,const QString &,const QString &,const QString &,const QString &,const QString &) const': 引数 1 を 'LPVOID' から変換できません「qlonglong」へ

– 稲妻

2020 年 9 月 4 日 19:18

@lightning LPVOID などの Windows 型には詳しくありませんが、これはポインターなので、常に整数値にキャストできるはずです。回答を更新します。

– ミッカ・C・ギマール

2020 年 9 月 4 日 19:20

ありがとう。キャスト後、次の警告が表示されます。警告: C4311: 'reinterpret_cast': 'LPVOID' からのポインタの切り捨て「int」に。また、アドレスが正しくないようです。整数のようなアドレス、つまり 300000 が表示されます。

– 稲妻

2020 年 9 月 4 日 19:27

@lightning 回答を再度編集しました。正しい整数型はlonglongです。64ビットマシンを使用しており、ポインタ型は単純なlongに適合しません。

– ミッカ・C・ギマール

2020 年 9 月 4 日 19:49

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。