Фон:
Мое приложение поставляется без ЭЛТ, поскольку оно ДОЛЖНО быть портативным и небольшим.
Проблема:
Когда я запускаю свое приложение на виртуальной машине для 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()
функция
Спасибо
Если скорость — не то, что вас беспокоит, вы можете использовать RtlMoveMemory и wsprintf, предоставляемые kernel32.dll, для memcpy (memmove) и sprintf (на самом деле это НЕ слишком медленно, просто невозможно выполнить оптимизацию времени соединения).
wsprintf доступен в Windows, событие без CRT. Просто #include windows.h