C# 如何在MessageBox上显示FARPROC内存地址
所以我试图弹出一个带有FARPROC内存地址的MessageBox,这样我就可以看到它的值。但我似乎做不到。我也试过一些古怪的东西 这是我最后一次尝试的不起作用的例子C# 如何在MessageBox上显示FARPROC内存地址,c#,c++,c,dll,C#,C++,C,Dll,所以我试图弹出一个带有FARPROC内存地址的MessageBox,这样我就可以看到它的值。但我似乎做不到。我也试过一些古怪的东西 这是我最后一次尝试的不起作用的例子 MessageBox(NULL, (LPCSTR) (WCHAR) myFarproc, "Loader", NULL); 它只是使程序崩溃,然后 MessageBox(NULL, (LPCSTR) myFarproc, "Loader", NULL); 胡言乱语。另外值得注意的是,调用此dll代码的程序是C#。您不能将指针强
MessageBox(NULL, (LPCSTR) (WCHAR) myFarproc, "Loader", NULL);
它只是使程序崩溃,然后
MessageBox(NULL, (LPCSTR) myFarproc, "Loader", NULL);
胡言乱语。另外值得注意的是,调用此dll代码的程序是C#。您不能将指针强制转换为字符串,并期望某些内容清晰易读,特别是如果您将随机指针强制转换为指向C样式字符串的指针(这就是LPCSTR) 您需要做的是使用类似于
sprintf_s
的方法将指针的数值转换为字符串,并显示结果字符串
例如(从内存中,没有编译):
这是假设你可以使用SpavtfsS的C++版本。 < p>我想我做到了。我这样做对吗
size_t pAddy = (size_t) myFarproc;
stringstream ss;
char buff[10];
ss << itoa(pAddy,buff,16);
MessageBox(NULL, (LPCSTR) ss.str().c_str(), "Address", NULL);
size\u t pAddy=(size\u t)myFarproc;
细流ss;
字符buff[10];
ss将地址强制转换为std::size\t
,并将该std::size\t
转换为字符串。将地址强制转换为字符永远不会起作用。除非您使用的是16位程序FARPROC
,否则它只是一个常规指针。wsprintf()
或sprintf()
(或swprintf()
,如果您正在编译Unicode),再加上一个文本缓冲区和一行添加的代码,可能会得到您想要的结果。istringstream
可能也会让您达到目的。为什么不使用%p
,而不需要转换为大小呢?没错。我会使用intn=snprintf(缓冲区,缓冲区容量,“%p”,(void*)myFarProc)代码>。如果n>=sizeof buffer
,请使用realloc buffer并重试。
size_t pAddy = (size_t) myFarproc;
stringstream ss;
char buff[10];
ss << itoa(pAddy,buff,16);
MessageBox(NULL, (LPCSTR) ss.str().c_str(), "Address", NULL);