首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

本地函数定义是非法的,这个如何改

2012-03-18 
求助:本地函数定义是非法的,这个怎么改[codeC/C++][/code]// cameratestDlg.cpp : 实现文件//#include s

求助:本地函数定义是非法的,这个怎么改
[code=C/C++][/code]// cameratestDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "cameratest.h"
#include "cameratestDlg.h"
#include ".\cameratestdlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// 对话框数据
enum { IDD = IDD_ABOUTBOX };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 实现
protected:
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CcameratestDlg 对话框



CcameratestDlg::CcameratestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CcameratestDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CcameratestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CcameratestDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP

END_MESSAGE_MAP()


// CcameratestDlg 消息处理程序

BOOL CcameratestDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// 将\“关于...\”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE);// 设置大图标
SetIcon(m_hIcon, FALSE);// 设置小图标

// TODO: 在此添加额外的初始化代码

return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}

void CcameratestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。

void CcameratestDlg::OnPaint() 
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CcameratestDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
//库函数的初始化和销毁实现
int CcameratestDlg::BuildSystem(void)
{
if(0!=m_nDeviceState)
{
return 1;
}
try
{
CreateDevice("IMAGE_CAP_DS",m_pDevImageCapture);//创建图像采集设备
ASSERT(m_pDevImageCapture); //确认设备存在
if(m_pDevImageCapture) //如果设备存在
{
AddMsgReceiver(m_pDevImageCapture); //添加设备到消息接收队列
m_pDevImageCapture->Init(); //图像采集设备初始化
m_pDevImageCapture->QueryInterface(InterfaceID_IMAGECAPTURE,
(LPVOID*)&m_pImageCapture); //查询图像采集接口
}


m_nDeviceState=1;//0 Raw,1 inited,2 running

m_pDevList[0]=new char[256]; //分配存放图像采集设备名称空间
m_pDevList[1]=new char[256];  
m_pDevList[2]=new char[256];

int nSource=m_pImageCapture->GetDeviceName(m_pDevList); //获得设备接口
if(nSource==0)
{
AfxMessageBox("no camera found.\nclick to quit.");
return 1;
}

m_cbxCamera.ResetContent(); //设备名称组合框清空
for(int i=0;i<nSource;i++) //添加名称到组合框
{
m_cbxCamera.AddString(m_pDevList[i]);
}
m_cbxCamera.SetCurSel(0); //设置第一个设备选中
m_cbxResolution.ResetContent(); //分辨率组合框清空
m_cbxResolution.AddString("160*120"); //添加分辨率到组合框
m_cbxResolution.AddString("320*240");  
m_cbxResolution.AddString("640*480");
m_cbxResolution.SetCurSel(0); //设置第一个设备选中

m_cbxFrameRate.ResetContent(); //分辨率组合框清空
m_cbxFrameRate.AddString("10"); //添加帧率到组合框
  m_cbxFrameRate.AddString("20"); 
  m_cbxFrameRate.AddString("30");
  m_cbxFrameRate.SetCurSel(0); //设置第一个设备选中

UpdateData(FALSE); //更新数据
}
catch(.../*IngeniousException&e*/) //捕获一切异常处理
{
Cleanup();
MessageBox("设备初始化失败!","ERROR",MB_OK);//报错信息
return 0;
}

//库函数销毁函数
int CcameratestDlg::DestroySystem(void)
{
if(m_pImageCapture) //m_pImageCapture还存在
{
m_pImageCapture->End(); //停止采集设备
m_pImageCapture->Release(); //释放空间
m_pImageCapture=NULL; //置空
}
m_nDeviceState=0; //设备状态复原
return 0;
}

//清除垃圾空间
void CcameratestDlg::Cleanup(void)
{
if(m_pImageCapture) //m_pImageCapture还存在
{
m_pImageCapture->Release(); //释放空间
m_pImageCapture=NULL; //置空
}
m_nDeviceState=0; //设备状态复原
}

//WM_DESTROY消息相应函数
void CcameratestDlg::OnDestroy()
{
CDialog::OnDestroy();


DestroySystem();
}

//添加具体功能的实现;
//获得设备参数设置
int CcameratestDlg::GetDeviceSetting(void)
  {
UpdateData(); //更新数据
m_cbxCamera.GetWindowText(m_strCamera);//得到图像采集设备名称
if(m_strCamera=="")
{
MessageBox("请选择一种摄像头");
return 1;
}

unsigned short nCurSel=m_cbxResolution.GetCurSel();//选取分辨率
switch(nCurSel)
{
default:
{
MessageBox("请选择分辨率");
return 1;
}
break;
case 0:
{
m_nWidthPixel=160;
m_nHeightPixel=120;
}
break;
case 1:
{
m_nWidthPixel=320;
m_nHeightPixel=240;
}
break;
case 2:
{
m_nWidthPixel=640;
m_nHeighPixel=480;
}
break;
}
n_CurSel=m_cbxFrameRate.GetCurSel();
switch(nCurSel) //选取帧率
{
default:
{
MessageBox("请选择帧率");
return 1;
}
break;
case 0:
{
m_nFrameRate=10;
}
break;
case 1:
{
m_nFrameRate=20;
}
break;
case 2:
{
m_nFrameRate=30;
}
break;
}
UpdateData(FALSE);
return 0;
}
//启动设备函数

  int CcameratestDlg::Start(void)
  {
if(0==m_nDeviceState)
{
BuildSystem();
}
return 0;
  }

  void CcameratestDlg::OnBnClickedBtnStart()//点击“开始”按钮事件处理函数


  {
if(0==m_nDeviceState) //未初始化
{
Start(); //启动
}
if (!GetDeviceSetting()) //获得设备参数
{
m_pImageCapture->BindDevName((char*)(LPCSTR)m_strCamera);//绑定设备名称
m_pImageCapture->SetVideoSettings(m_nWidthPixel,m_nHeightPixel,m_nFrameRate);//设置设备参数值
CWnd* pWnd=GetDlgItem(IDC_IMAGE); //获得图片控件指针
m_pImageCapture->BinCapWnd(pWnd->GetSafeHwnd());//绑定到图片控件上
m_pImageCapture->Init(); //初始化
m_pImageCapture->Start(); //运行起来
m_nDeviceState=2; //状态赋给2
}
  }

  //退出函数
  void CcameratestDlg::OnBnClickedBtnExit()
  {
OnCancel();
  }
最后编译
c:\MTSoft\Program\Demo\cameratest\cameratestDlg.cpp(234): error C2601: “CcameratestDlg::OnDestroy” : 本地函数定义是非法的
c:\MTSoft\Program\Demo\cameratest\cameratestDlg.cpp(340): error C2601: “CcameratestDlg::OnBnClickedBtnExit” : 本地函数定义是非法的
c:\MTSoft\Program\Demo\cameratest\cameratestDlg.cpp(321): error C2601: “CcameratestDlg::OnBnClickedBtnStart” : 本地函数定义是非法的
c:\MTSoft\Program\Demo\cameratest\cameratestDlg.cpp(244): error C2601: “CcameratestDlg::GetDeviceSetting” : 本地函数定义是非法的
c:\MTSoft\Program\Demo\cameratest\cameratestDlg.cpp(210): error C2601: “CcameratestDlg::DestroySystem” : 本地函数定义是非法的
c:\MTSoft\Program\Demo\cameratest\cameratestDlg.cpp(223): error C2601: “CcameratestDlg::Cleanup” : 本地函数定义是非法的
c:\MTSoft\Program\Demo\cameratest\cameratestDlg.cpp(312): error C2601: “CcameratestDlg::Start” : 本地函数定义是非法的


[解决办法]
语法错误,自己好好查查
int CcameratestDlg::BuildSystem(void)
{
if(0!=m_nDeviceState)
{
return 1;
}
try
{
CreateDevice("IMAGE_CAP_DS",m_pDevImageCapture);//创建图像采集设备
ASSERT(m_pDevImageCapture); //确认设备存在
if(m_pDevImageCapture) //如果设备存在
{
AddMsgReceiver(m_pDevImageCapture); //添加设备到消息接收队列
m_pDevImageCapture->Init(); //图像采集设备初始化
m_pDevImageCapture->QueryInterface(InterfaceID_IMAGECAPTURE,
(LPVOID*)&m_pImageCapture); //查询图像采集接口
}
m_nDeviceState=1;//0 Raw,1 inited,2 running

m_pDevList[0]=new char[256]; //分配存放图像采集设备名称空间
m_pDevList[1]=new char[256];
m_pDevList[2]=new char[256];

int nSource=m_pImageCapture->GetDeviceName(m_pDevList); //获得设备接口
if(nSource==0)
{
AfxMessageBox("no camera found.\nclick to quit.");
return 1;
}

m_cbxCamera.ResetContent(); //设备名称组合框清空
for(int i=0;i<nSource;i++) //添加名称到组合框
{
m_cbxCamera.AddString(m_pDevList[i]);
}
m_cbxCamera.SetCurSel(0); //设置第一个设备选中
m_cbxResolution.ResetContent(); //分辨率组合框清空
m_cbxResolution.AddString("160*120"); //添加分辨率到组合框
m_cbxResolution.AddString("320*240");
m_cbxResolution.AddString("640*480");
m_cbxResolution.SetCurSel(0); //设置第一个设备选中

m_cbxFrameRate.ResetContent(); //分辨率组合框清空
m_cbxFrameRate.AddString("10"); //添加帧率到组合框
m_cbxFrameRate.AddString("20"); 
m_cbxFrameRate.AddString("30");
m_cbxFrameRate.SetCurSel(0); //设置第一个设备选中

UpdateData(FALSE); //更新数据
}
catch(.../*IngeniousException&e*/) //捕获一切异常处理
{
Cleanup();
MessageBox("设备初始化失败!","ERROR",MB_OK);//报错信息
return 0;
}
//比如这里,上一个函数的结束符呢????
//库函数销毁函数
int CcameratestDlg::DestroySystem(void)
{
[解决办法]
从第一个出错的往前找,先查{}的匹配情况。

热点排行