Системная ошибка 122 - ERROR_INSUFFICIENT_BUFFER при вызове WriteMsgQueue ()

0

"новичок в C++, так что я все еще пытаюсь прогнать код, так что извините за глупость!

Я вношу изменения в какой-то существующий код.

Старый код вызывает функцию ниже, где cbDataSize определяется sizeof (MyStruct)

BOOL WINAPI WriteMsgQueue(HANDLE hMsgQ, LPVOID lpBuffer, DWORD cbDataSize, DWORD dwTimeout, DWORD dwFlags);

Изменение, которое я сделал, это добавить еще один Struct в Struct MyStruct, чтобы он теперь выглядел так:

struct MyInnerStruct {
    char myarray[20][256];
    long mycount; 
};

struct MyStruct {
    long value1;
    long value2;
    MyInnerStruct inner;  
};

Ниже приведен вызов WriteMsgQueue:

HANDLE requestQueue;
MyStruct myData;
DWORD timeout = 12000;

WriteMsgQueue(requestQueue, &myData, sizeof(myData), timeout, 0);

Теперь я ERROR_INSUFFICIENT_BUFFER System Error 122 - ERROR_INSUFFICIENT_BUFFER при WriteMsgQueue().

Любая помощь оценивается, как я рассчитываю правильный размер?

  • 2
    Я не вижу никаких вызовов метода WriteMsgQueue () в вашем коде. msdn.microsoft.com/en-us/library/ee488786.aspx говорит, что ERROR_INSUFFICIENT_BUFFER означает «Размер lpBuffer был слишком мал для размещения сообщения».
  • 0
    Показать вызов WriteMsg .. и отправленные ему параметры и распределение для переменных.
Показать ещё 2 комментария
Теги:
struct
sizeof

1 ответ

4
Лучший ответ

Вероятно, очередь не была выделена с достаточным пространством для хранения вашей более крупной структуры. Вам может потребоваться найти, где старый код создает очередь (через CreateMsgQueue()), и посмотреть на MSGQUEUEOPTIONS структуру MSGQUEUEOPTIONS. Эта структура имеет поле cbMaxMessage которое определяет максимальный размер одного сообщения. Возможно, вам придется увеличить это. Также проверьте другие поля, такие как cbSize, dwMaxMessages и т.д.

  • 0
    Отлично, спасибо. Это было значение cbMaxMessage, которое нужно было увеличить.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню