我对C ++很陌生,因为我通常使用C#。
这是我目前正在使用的代码(虽然我已经尝试了很多其他的东西):
template <class T>
inline PCSTR to_string (const T& t)
{
std::stringstream ss;
ss << t;
return ss.str().c_str();
}
ULONG bugCheckCode = 0;
ULONG64 bugCheckArgs[4] = {0};
Control->ReadBugCheckData(&bugCheckCode, &bugCheckArgs[0], &bugCheckArgs[1], &bugCheckArgs[2], &bugCheckArgs[3]);
CHAR arg2[sizeof(bugCheckArgs[1])];
ZeroMemory(arg2, sizeof(bugCheckArgs[1]));
memcpy(arg2, &bugCheckArgs[1], sizeof(bugCheckArgs[1]));
Control->CallExtension(NULL, "function", arg2);
基本上,ReadBugCheckData返回一个PULONG64,我给ULONG64一个地址。我很确定这一点没问题,但由于我是所有这些记忆内容的新手,我会发布它以防万一这里的错误。
所以我现在有一个ULONG64(typedef unsigned long long ULONG64),我需要转换为PCSTR(typedef CONST CHAR * PCSTR),如果我理解正确的话,它是一个char数组???所以我尝试了在代码片段顶部发布的to_string函数,我尝试了memcpy,但我无法让它工作。
但我能得到的只是虚无或垃圾数据。我发现这个调试特别困难,因为这是一个扩展,我无法正确地执行代码。
有关如何进行此转化的任何想法?
非常感谢。
答案 0 :(得分:4)
此代码:
template <class T>
inline PCSTR to_string (const T& t)
{
std::stringstream ss;
ss << t;
return ss.str().c_str();
}
返回指向由str()
返回的临时所拥有的内存的指针,因此一旦函数退出就会被销毁。而是使用:
template <class T>
inline std::string to_string (const T& t)
{
std::stringstream ss;
ss << t;
return ss.str();
}
在通话网站上将const char*
检索为:
CallSomething(to_string(x).c_str());
答案 1 :(得分:1)
看看这些功能: Conversion functions Visual C++ Runtime 安全版: Conversions functions CRT_SECURE 向下滚动到框的底部,寻找......
radix表示数字基数(普通10,二进制2,十六进制16)
char * _ui64toa(
unsigned _int64 value,
char (&str)[size],
int radix
); // C++ only
errno_t _i64toa_s(
__int64 value,
char *buffer,
size_t sizeInCharacters,
int radix