MessageBox expects to receive a string. Since you want to pass an address and render it as a hexadecimal number, you need to create a string holding the hexadecimal number first.
void PrintBaseAddr() {
while (true) {
if (GetAsyncKeyState(VK_F6) & 0x80000) {
HMODULE BaseAddr = GetModuleHandleA(NULL);
BaseAddr += 0x351333;
std::ostringsream buffer;
buffer << (void *)BaseAddr;
MessageBoxA(NULL, buffer.str().c_str(), "Base Address", MB_OK);
}
}
}
If you're using MessageBox quite a bit, it's sometimes useful to create a manipulator to handle this:
class MessageBox {
std::string title;
int type;
public:
MessageBox(std::string const &title, int type = MB_OK)
: title(title), type(type)
{ }
friend std::ostream &operator<<(std::ostream &os, MessageBox const &m) {
auto &oss = dynamic_cast<std::ostringstream &>(os);
MessageBox(NULL, oss.str().c_str(), m.title, m.type);
return os;
}
};
You'd use this something like:
std::ostringstream os;
os << (void *)BaseAddress << MessageBox("Base Address");
The good point here is that you get all the usual stream capabilities, so if you need to print out some random class you can't deal with directly (but provides an overloaded << operator) you can use it in a MessageBox.