1

背景:

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

问题:

当我在 Windows XP 的虚拟机上运行我的应用程序时,我的CreateProcess()功能失败了,我需要GetLastError() DWORDMessageBox()不使用任何 CRT 的情况下显示,

如何sprintf()在我的程序中手动实现函数以将DWORD类型转换为 achar 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()功能

谢谢

4

2 回答 2

4

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

于 2013-06-02T03:21:56.810 回答
2

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

于 2013-06-02T02:56:40.513 回答