Преобразование DWORD без CRT, реализация пользовательской функции sprintf ()

Фон:

Мое приложение поставляется без ЭЛТ, поскольку оно ДОЛЖНО быть портативным и небольшим.

Проблема:

Когда я запускаю свое приложение на виртуальной машине для Windows XP, мой CreateProcess() функция не работает, мне нужно отобразить GetLastError() DWORD в MessageBox() без использования какого-либо ЭЛТ,

Как я могу реализовать вручную 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() функция

Спасибо

1

Решение

Если скорость — не то, что вас беспокоит, вы можете использовать RtlMoveMemory и wsprintf, предоставляемые kernel32.dll, для memcpy (memmove) и sprintf (на самом деле это НЕ слишком медленно, просто невозможно выполнить оптимизацию времени соединения).

2

Другие решения

wsprintf доступен в Windows, событие без CRT. Просто #include windows.h

4

По вопросам рекламы [email protected]