是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()
。
对于我如何计算正确的尺寸有什么帮助?
答案 0 :(得分:4)
队列可能没有足够的空间来容纳更大的结构。您可能需要找到旧代码创建队列的位置(通过CreateMsgQueue()
)并查看传入的MSGQUEUEOPTIONS
结构。此结构具有cbMaxMessage
字段,用于确定最大大小一条消息。您可能需要增加此值。另请查看其他字段,例如cbSize
,dwMaxMessages
等。