C++ 如何将argv[1]转换为LPCVOID?
我有一个C++ 如何将argv[1]转换为LPCVOID?,c++,windows,winapi,C++,Windows,Winapi,我有一个C++实用程序,它接受argv[]参数。其中一个参数将由Windows API调用转换并用作内存地址,根据文档,该调用要求该地址为LPCVOID。我尝试了以下几点: int main(int argc, CHAR* argv[]) { if (argc < 3) { cout << "Arg1 and Arg2 are required."; exit(EXIT_FAILURE); } LPCVOID addr
C++
实用程序,它接受argv[]
参数。其中一个参数将由Windows API调用转换并用作内存地址,根据文档,该调用要求该地址为LPCVOID
。我尝试了以下几点:
int main(int argc, CHAR* argv[])
{
if (argc < 3) {
cout << "Arg1 and Arg2 are required.";
exit(EXIT_FAILURE);
}
LPCVOID address = (LPCVOID)argv[1];
cout << address;
// some other stuff here
return 0;
}
必须将
argv[1]
指向的字符串转换为整数表示,然后将整数转换为LPCVOID指针
这似乎解决了问题:
uintpttr\u\u\u地址;
std::stringstream-ss;
地址;
LPCVOID地址=(LPCVOID)u_地址;
您必须将argv[1]指向的字符串转换为整数表示,然后将整数转换为LPCVOID指针
这似乎解决了问题:
uintpttr\u\u\u地址;
std::stringstream-ss;
地址;
LPCVOID地址=(LPCVOID)u_地址;
您是指argv[1]
的地址是那样还是内容是那样?能否显示创建流程时使用的命令行。我猜您是以文本形式传递地址的。@DavidHeffernan是的,我是以表示十六进制地址的文本字符串形式传递内存地址的。编辑我的问题以显示这一点。现在问题清楚了。您是指argv[1]
的地址是那样还是内容是那样?您可以显示创建流程时使用的命令行吗。我猜您是以文本形式传递地址的。@DavidHeffernan是的,我是以表示十六进制地址的文本字符串形式传递内存地址的。编辑了我的问题以显示这一点。现在问题清楚了。我建议不要使用unsigned int
来存储指针,64位代码将失败。使用uintpttr\t
而不是固定答案。当我看到他的示例地址时没有想到这一点。您可以使用并将代码切成两半:auto-const-address{std::stoull(argv[1],0,16)}
@IInspectable您应该使用nullptr
而不是0
作为空指针,使用stoull
最好传入一个pos
指针,这样您就可以检查它是否解析了整个字符串。我建议不要使用unsigned int
来存储指针,但对于64位代码,它将失败。使用uintpttr\t
而不是固定答案。当我看到他的示例地址时没有想到这一点。您可以使用并将代码切成两半:auto-const-address{std::stoull(argv[1],0,16)}
@IInspectable您应该使用nullptr
而不是0
作为空指针,使用stoull
最好传入pos
指针,以便检查它是否已解析整个字符串
myprog.exe 161551C