Исправьте эту ошибку:GetLastError 0x13d
В этом примере dwerror 10045L
.но этот код возвращает значение 0x13d как ошибку. Как получить формат сообщения? Пожалуйста, ознакомьтесь с ним.
TCHAR lpMsgBuf[512];
if(!FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL ))
{
wprintf(L"Format message failed with 0x%x\n", GetLastError());
return;
}
2 ответа
0x13d == 317 == ERROR_MR_MID_NOT_FOUND
, Сообщение об ошибке, которую вы пытаетесь найти, не существует в SYSTEM. Может быть, ваша ошибка возникла из конкретной библиотеки или драйвера. Если вы знаете, какой dll\driver попытаться его обработать, укажите и укажите FORMAT_MESSAGE_FROM_HMODULE
вместо FORMAT_MESSAGE_FROM_SYSTEM
и предоставить ручку в качестве источника в вызове FormatMessage
,
И кроме того, если вы используете FORMAT_MESSAGE_ALLOCATE_BUFFER
Вы должны объявить переменную типа LPTSTR
лайк LPTSTR pMsg;
и передать его в FormatMessage как (LPTSTR)&pMsg
и когда вы закончите с этим использовать LocalFree(pMsg)
освободить выделенную память.
Прежде всего, когда вы говорите FORMAT_MESSAGE_ALLOCATE_BUFFER, вам не нужно выделять больше, чем указатель. Затем вы передаете указатель на этот указатель в lpBuffer. Так что попробуйте это:
TCHAR* lpMsgBuf;
if(!FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL ))
{
wprintf(L"Format message failed with 0x%x\n", GetLastError());
return;
}
И не забудьте позвонить в LocalFree
или вы сами выделяете буфер:
TCHAR lpMsgBuf[512];
if(!FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) lpMsgBuf,
512, NULL ))
{
wprintf(L"Format message failed with 0x%x\n", GetLastError());
return;
}
Также попробуйте это:
#include <cstdio>
#include <cstdlib>
int alloc(char** pbuff,unsigned int n)
{
*pbuff=(char*)malloc(n*sizeof(char));
}
int main()
{
char buffer[512];
printf("Address of buffer before: %p\n",&buffer);
// GCC sais: "cannot convert char (*)[512] to char** ... "
// alloc(&buffer,128);
// if i try to cast:
alloc((char**)&buffer,128);
printf("Address of buffer after: %p\n",&buffer);
// if i do it the right way:
char* p_buffer;
alloc(&p_buffer,128);
printf("Address of buffer after: %p\n",p_buffer);
return 0;
}
Не имеет смысла пытаться изменить адрес переменной. Вероятно, поэтому ваш код не работает.