关于GlobalLock和GlobalUnlock,该如何解决
关于GlobalLock和GlobalUnlock
在 < <windows程序设计> > 的第十二章的ClipText中
有
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDM_EDIT_PASTE:
OpenClipboard (hwnd) ;
if (hGlobal = GetClipboardData (CF_TCHAR))
{
pGlobal = GlobalLock (hGlobal) ;
if (pText)
{
free (pText) ;
pText = NULL ;
}
pText = malloc (GlobalSize (hGlobal)) ;
lstrcpy (pText, pGlobal) ;
InvalidateRect (hwnd, NULL, TRUE) ;
}
CloseClipboard () ;
return 0 ;
这里为什么在调用GlobalLock之后没调用GlobalUnlock来解锁,
望大牛们解答~~
------解决方案--------------------
这只是个示例程序,估计是忘了写了。
MSDN自己的示例中,同样的位置上有GlobalUnlock
------解决方案--------------------
1、也可能在别的地方调用了;
2、在释放之前先解锁,否则释放不了内存。
------解决方案--------------------
MSDN提示不能lock时间过长,有可能CloseClipboard中做了unlock,所以看不出明显区别。
不过,按照调用规范,还是自己unlock比较好。
在 < <windows程序设计> > 的第十二章的ClipText中
有
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDM_EDIT_PASTE:
OpenClipboard (hwnd) ;
if (hGlobal = GetClipboardData (CF_TCHAR))
{
pGlobal = GlobalLock (hGlobal) ;
if (pText)
{
free (pText) ;
pText = NULL ;
}
pText = malloc (GlobalSize (hGlobal)) ;
lstrcpy (pText, pGlobal) ;
InvalidateRect (hwnd, NULL, TRUE) ;
}
CloseClipboard () ;
return 0 ;
这里为什么在调用GlobalLock之后没调用GlobalUnlock来解锁,
望大牛们解答~~
------解决方案--------------------
这只是个示例程序,估计是忘了写了。
MSDN自己的示例中,同样的位置上有GlobalUnlock
------解决方案--------------------
1、也可能在别的地方调用了;
2、在释放之前先解锁,否则释放不了内存。
------解决方案--------------------
MSDN提示不能lock时间过长,有可能CloseClipboard中做了unlock,所以看不出明显区别。
不过,按照调用规范,还是自己unlock比较好。