自启动错误,双击正常

deco1515 2012-12-06 11:42:57
在精简的xp上,把自己写的程序通过快捷方式加入启动项后,运行错误,调试发现错误发生在调用第三方库的地方。可是双击运行程序,就不会错误。第三库其他地方也在用,没用错误
...全文
120 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijingxi 2012-12-07
  • 打赏
  • 举报
回复
库文件和程序放在一个目录试试!
deco1515 2012-12-07
  • 打赏
  • 举报
回复
问题解决了,原来是程序中初始化的时候拉伸了窗口,后面用到窗口大小的时候,以为是拉伸后的大小,结果却和实际的拉伸不一样,改成需要的大小就对了。不知道这个现象的原因,是因为启动太快了,初始化拉伸后窗口大小参数没有发生改变?
deco1515 2012-12-07
  • 打赏
  • 举报
回复
现在怀疑是使用malloc分配10多M内存和GetDIBits时出错,难度自启动的程序不能分配太大的内存?
deco1515 2012-12-07
  • 打赏
  • 举报
回复
我把库换成一个具体函数RGBTOYUV420,调试到函数里面,发现是第一个输入参数越界访问。输入参数是,由GetDIBits生成的,RGB数据比较大,有10多M BITMAPINFOHEADER bi = {0}; bi.biSize = sizeof(BITMAPINFOHEADER); bi.biWidth = bitmap.bmWidth; bi.biHeight = bitmap.bmHeight; bi.biPlanes = 1; bi.biBitCount = 24; bi.biCompression = 0; DWORD dwSize = ((bitmap.bmWidth * 24 + 31) / 32) * 4 * bitmap.bmHeight; HANDLE hDib = GlobalAlloc(GHND, dwSize + sizeof(BITMAPINFOHEADER)); if (NULL == hDib) { ::SelectObject(hMemDC, hOldBitmap); ::DeleteObject(hBitmap); ::DeleteDC(hMemDC); ::ReleaseDC(hWnd, hSrcDC); return FALSE; } LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib); *lpbi = bi; if (NULL == lpbi) { OSI_Debug(DLEVEL_ERROR, "WriteDecodeBufTask GlobalLock failed!\n"); GlobalUnlock(hDib); return FALSE; } int res = ::GetDIBits(hMemDC, hBitmap, 0, bitmap.bmHeight, (BYTE*)lpbi + sizeof(BITMAPINFOHEADER), (BITMAPINFO*)lpbi, DIB_RGB_COLORS); if (0 == res) { OSI_Debug(DLEVEL_ERROR, "WriteDecodeBufTask GetDIBits failed!\n"); GlobalUnlock(hDib); return OSI_FALSE; } int ret = RGBTOYUV420((BYTE*)lpbi + sizeof(BITMAPINFOHEADER), nWidth, nHeight, yuv420Buf); GlobalUnlock(hDib);
zara 2012-12-07
  • 打赏
  • 举报
回复
什么库啊,是不是这库对系统状态有特殊要求,“启动”时某些条件还没好,等到自己双击时却是已经满足了?
deco1515 2012-12-07
  • 打赏
  • 举报
回复
这个一个静态库

18,124

社区成员

发帖
与我相关
我的任务
社区描述
Windows客户端使用相关问题交流社区
社区管理员
  • Windows客户端使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧