cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 2065|回复: 4

求助:为什么我的debug和release运行结果不一样

[复制链接]
发表于 2009-5-20 19:53:24 | 显示全部楼层 |阅读模式
下面是代码部分,是用了avicap32.dll来控制摄象头,我在debug模式下一切没有问题,一但切换到realease模式下,一按启动按钮start就出现"General Protection"的错误,谢谢了
/*---------------------------------------------------------------------------*/
/* 摄像头相关                                                                */
/*---------------------------------------------------------------------------*/
#include "windows.h"
#include <formatio.h>
#include "avicap32.h"

static int panelHandle;
/*---------------------------------------------------------------------------*/
/* Camera 摄像头相关                                                         */
/*---------------------------------------------------------------------------*/
static int handle;
static int result;
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
  return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "video.uir", PANEL)) < 0)
  return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
int CVICALLBACK start (int panel, int control, int event,
  void *callbackData, int eventData1, int eventData2)
{
int width;
    int height;
    int top;
    int left;
switch (event)
{
  case EVENT_COMMIT:
            //获得面板句柄
            GetPanelAttribute(panelHandle, ATTR_SYSTEM_WINDOW_HANDLE, &handle);
            
            //获得屏幕中图像要显示的位置
            GetCtrlAttribute(panelHandle, PANEL_CANVAS, ATTR_LEFT, &left);
            GetCtrlAttribute(panelHandle, PANEL_CANVAS, ATTR_TOP, &top);
            GetCtrlAttribute(panelHandle, PANEL_CANVAS, ATTR_HEIGHT, &height);
            GetCtrlAttribute(panelHandle, PANEL_CANVAS, ATTR_WIDTH, &width);
            
            //打开摄像头
            result = capCreateCaptureWindowA("",WS_CHILD | WS_VISIBLE ,left,top,width,height,handle,0);
            
            //设置摄像头函数
            SendMessage((HWND)result, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
   SendMessage((HWND)result, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
   SendMessage((HWND)result, WM_CAP_DRIVER_CONNECT, 0, 0);
            SendMessage((HWND)result, WM_CAP_SET_SCALE, 1, 0);
            SendMessage((HWND)result, WM_CAP_SET_PREVIEWRATE, 66, 0);
            SendMessage((HWND)result, WM_CAP_SET_OVERLAY, 1, 0);
            SendMessage((HWND)result, WM_CAP_SET_PREVIEW, 1, 0);
   break;
}
return 0;
}
 楼主| 发表于 2009-5-20 21:23:40 | 显示全部楼层
int CVICALLBACK start (int panel, int control, int event,
  void *callbackData, int eventData1, int eventData2)
是start按钮的回调函数
发表于 2009-5-21 08:41:18 | 显示全部楼层
从上面的代码看不出明显错误!
你也可以参考以下王建新的源码:
http://blog.sina.com.cn/s/blog_4 ... el=rela_prevarticle

还要考虑系统是否出现问题,建议在其它机器上试一下!
 楼主| 发表于 2009-5-21 13:18:04 | 显示全部楼层
是参考了王建新老师的程序,另外一个朋友也在其他电脑上编写这个程序,运行debug的时候没有问题,运行release的时候就出现同样的错误
 楼主| 发表于 2009-5-21 19:29:50 | 显示全部楼层
向斑竹汇报下,问题已经找了,基本算是解决了,我想是capCreateCaptureWindowA调用时使用了堆栈,函数退出时释放堆栈后就出问题了....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-20 07:29 , Processed in 0.618274 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表