gpt4 book ai didi

c++ - 将 WCHAR 数组作为 LPARAM 发送到 winproc 的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-28 03:20:48 24 4
gpt4 key购买 nike

所以我遇到了堆问题,想知道它是否与我处理某些数组的方式有关。实际上,在某些时候我有一些像这样的消息发送到我的 WinProc:

SendMessage(hwnd, LOG_ADD, NULL, (LPARAM)L"Initializing winsock... ");

LOG_ADD 定义为 104。在 WinProc 内部,当 msg==LOG_ADD 时,会发生以下情况:

case LOG_ADD:
{
pGame->pMessageLog->PutToLog((WCHAR*)lParam);
pGame->pD2DResources->OnRender(pGame->pMessageLog);

有 MessageLog::PutToLog(WCHAR[]):

void MessageLog::PutToLog(WCHAR txt[])
{
int strLen=wcslen(txt);
int logLen=wcslen(logHistory);

WCHAR* pWCHAR = txt;

int x=0;

// Counts the number of '\n' into wString and adds that number to nLogLines
for(x=0; x<strLen; x++)
{
if(pWCHAR[x]=='\n')
nLogLines++;
}

pWCHAR = logHistory;

x=0;
while(nLogLines>5)
{
if(pWCHAR[x]=='\n')
nLogLines--;
x++;
}

if(x!=0)
{
for(int y=0; y<logLen-x; y++)
{
pWCHAR[y]=pWCHAR[y+x];
}
}

wcscat (logHistory, txt);
}

这能解释腐败问题吗?实际上,当我删除所有 SendMessage(hwnd, LOG_ADD...) 行时,当编译器执行行“struct hostent* host;”时,损坏不会在几行之后出现。或“if((host=gethostbyname(server))==NULL)”。

最佳答案

您在评论中提问:

is this the proper way of sending a WCHAR array as a LPARAM and sending it to another function to use?

当然,只要您知道在调用站点传递的内容并确保将其视为(转换)为窗口过程中的实际类型,就完全没问题。

只需确保正确处理任何指向内存的指针,这些指针在您访问内存时可能无效。例如,如果您发布 一条消息而不是发送 它并在接收者处理该消息之前将指针传递给超出范围的内存。

还请记住正确初始化您发送的任何数据...

关于c++ - 将 WCHAR 数组作为 LPARAM 发送到 winproc 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15489616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com