转换没有CRT的DWORD,实现自定义sprintf()函数

时间:2013-06-02 02:50:17

标签: c++ c printf msvcrt

背景:

我的应用程序没有CRT,因为它必须是便携式的,并且很小。

问题:

当我在Windows XP虚拟机上运行我的应用程序时,我的CreateProcess()函数失败,我需要在GetLastError()中显示DWORD MessageBox()而不使用任何内容CRT,

如何在我的程序中手动实现sprintf()函数,将DWORD类型转换为char buffer以显示在MessageBox()函数中以获取错误类型,因此,我可以解决问题。

我已经实现了我自己的memset()功能

extern "C" void * __cdecl memset(void *, int, size_t);


#pragma function(memset)
void * __cdecl memset(void *pTarget, int value, size_t cbTarget) {
unsigned char *p = static_cast<unsigned char *>(pTarget);
while (cbTarget-- > 0) {
    *p++ = static_cast<unsigned char>(value);
}
return pTarget;
}

我不确定如何实现自定义sprintf()功能

谢谢

2 个答案:

答案 0 :(得分:4)

wsprintf在Windows中可用,没有CRT的事件。只需#include windows.h

答案 1 :(得分:2)

如果速度不是您所关心的,您可以使用kernel32.dll提供的RtlMoveMemory和wsprintf进行memcpy(memmove)和sprintf(实际上不是那么慢,只是无法进行链接时优化)。