调用WriteMsgQueue()时出现系统错误122 - ERROR_INSUFFICIENT_BUFFER

时间:2014-01-03 16:52:52

标签: c++ c struct sizeof

是C ++的新手,所以仍然试图让我的头脑绕过代码,所以抱歉听起来很愚蠢!

我正在对一些现有代码进行更改。

旧代码调用下面的函数,其中cbDataSize由sizeof(MyStruct)确定

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

我做的更改是在Struct MyStruct中添加另一个Struct,现在它看起来像:

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);

我正在调用System Error 122时收到ERROR_INSUFFICIENT_BUFFER - WriteMsgQueue()

对于我如何计算正确的尺寸有什么帮助?

1 个答案:

答案 0 :(得分:4)

队列可能没有足够的空间来容纳更大的结构。您可能需要找到旧代码创建队列的位置(通过CreateMsgQueue())并查看传入的MSGQUEUEOPTIONS结构。此结构具有cbMaxMessage字段,用于确定最大大小一条消息。您可能需要增加此值。另请查看其他字段,例如cbSizedwMaxMessages等。