【发布时间】:2013-06-02 02:50:17
【问题描述】:
背景:
我的应用程序没有 CRT,因为它必须便携且小巧。
问题:
当我在 Windows XP 的虚拟机上运行我的应用程序时,我的 CreateProcess() 函数失败,我需要在 MessageBox() 中显示 DWORD 而不使用任何 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() 函数
谢谢
【问题讨论】:
-
只是静态链接。链接器会将
memcpy和sprintf实现复制到您的可执行文件中。您无法避免拥有这些功能的一个版本,那么为什么不选择一个经过良好测试的版本呢? -
我的应用程序有大小限制,否则我会。
-
所以?无论链接器从何处获取这些字节,您的应用程序都将包含
memcpy所需的字节。 -
静态链接 CRT 仍然会带来大量你不使用的东西,我猜 LTCG 没那么聪明