MFC加载com组件,调试发现系统在此应用程序中检测到基于堆栈的缓冲区溢出

无法支持的类型 2016-12-09 08:48:45
我在MFC程序里面加了一个OCX控件。点击获取数据的时候发生如题的异常,难道是我返回值太多造成的?
...全文
5245 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我知道怎么回事了,Formt函数最好不要把 自己作为参数传递进去。把上面的代码修改为

if (m_cam_count > 0){
        CString strDeivce,str;
        char name[MAX_PATH];
        for (int i = 0; i < m_cam_count; i++){
            memset(name, 0, MAX_PATH);
            if (CCameraDS::CameraName(i, name, MAX_PATH)){
                strDeivce.Format(("%s%s%d%s%d%s%s%s"), strDeivce, "{\"device\":", i, ",\"seqNbr\":", i, ",\"name\":\"", name, "\"},");//
                 str=strDeivce;
            }
        }
就完成了
  • 打赏
  • 举报
回复
引用 3 楼 xianglitian 的回复:
这个控件有使用文档么 是不是在调用你出问题的这个函数之前有一些初始化的工作要做
这个控件我有源码。能进入里面调式
向立天 2016-12-09
  • 打赏
  • 举报
回复
CString strDeivce; 把这个声明放到for循环里面
向立天 2016-12-09
  • 打赏
  • 举报
回复
这个控件有使用文档么 是不是在调用你出问题的这个函数之前有一些初始化的工作要做
  • 打赏
  • 举报
回复
引用 1 楼 swwllx 的回复:
加断点调试吧 控件注册了吗 有用信息太少了
我不知道怎么调式,里面就一句代码m_Ctrl.getDevices(); m_Ctrl是我关联的控件名。至于控件注册,肯定注册了,我能调用里面别的函数,比如m_Ctrl.createVideo(long device, long resolutionX, long resolutionY) 这个就能用。 调式主要是这个MFC程序不能调式,因为我要把ocx控件附加到进程里面,如果MFC也是调式状态,则会说已有调式信息。所以我MFC程序只能ctrl+f5启动。 启动之后,把控件附加到进程以后,发现没有问题,按住f10一直就是微软内部的 也不知道那里出的错
三岁、就很帅 2016-12-09
  • 打赏
  • 举报
回复
加断点调试吧 控件注册了吗 有用信息太少了
  • 打赏
  • 举报
回复
进入断点以后, 第一次没有事情,当第二次循环的时候 inline void* CThreadSlotData::GetThreadValue(int nSlot) { EnterCriticalSection(&m_sect); ASSERT(nSlot != 0 && nSlot < m_nMax); ASSERT(m_pSlotData != NULL); ASSERT(m_pSlotData[nSlot].dwFlags & SLOT_USED);//断在了这句话 调用代码为
if (m_cam_count > 0){
		CString strDeivce;
		char name[MAX_PATH];
		for (int i = 0; i < m_cam_count; i++){
			memset(name, 0, MAX_PATH);
			if (CCameraDS::CameraName(i, name, MAX_PATH)){
				strDeivce.Format(("%s%s%d%s%d%s%s%s"), strDeivce, "{\"device\":", i, ",\"seqNbr\":", i, ",\"name\":\"", name, "\"},");//第二次循环出错
			}
		}
赵4老师 2016-12-09
  • 打赏
  • 举报
回复
需要将所有"..."替换为_T("...")
  • 打赏
  • 举报
回复
查看调用堆栈发现程序断在了 strDeivce.Format(_T("%s%s%d%s%d%s%s%s"), strDeivce, "{\"device\":", i, ",\"seqNbr\":", i, ",\"name\":\"", name, "\"},"); 这里是不是写错了

3,249

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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