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