诸位大侠,小弟新学编程,今日想在已有的工程中加入一新类CMMTimer,内容如下,已在原来工程的CPP文件中添加了#include "MMtimer.h",但仍出错(3个错误):
error C2146: syntax error : missing ';' before identifier 'MMTimerProc'
error C2182: 'PASCAL' : illegal use of type 'void'
fatal error C1004: unexpected end of file found
MMTimer.h文件
class CMMTimer
{
public:
CMMTimer();
virtual ~CMMTimer();
BOOL SetMMTimer(UINT nInterval, UINT nResolution);
void KillMMTimer();
UINT nTimerRes, nTimerID;
};
新CMMTimer的MMTimer.cpp文件
void PASCAL MMTimerProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1,DWORD dw2);
CMMTimer::CMMTimer() {}
CMMTimer::~CMMTimer() {}
BOOL CMMTimer::SetMMTimer(UINT nInterval, UINT nResolution
{
TIMECAPS tc;
nTimerRes = nResolution;
if (timeGetDevCaps(&tc, sizeof(TIMECAPS))==TIMERR_NOERROR)
{
if(nTimerRes!=min(max(tc.wPeriodMin, nTimerRes), tc.wPeriodMax))
return FALSE;
}
if(timeBeginPeriod(nTimerRes)==TIMERR_NOERROR)
{
nTimerID = timeSetEvent(nInterval, nTimerRes, MMTimerProc, NULL,TIME_PERIODIC);
if(!nTimerID)
return TRUE;
else
return FALSE;
}
else
return FALSE;
}
void CMMTimer::KillMMTimer()
{
if(nTimerID)
{
timeKillEvent(nTimerID);
nTimerID = 0;
}
timeEndPeriod(nTimerRes);
}
void PASCAL MMTimerProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1,DWORD dw2)
{
UpdateFrame();
}
error C2146: syntax error : missing ';' before identifier 'MMTimerProc'
error C2182: 'PASCAL' : illegal use of type 'void'
fatal error C1004: unexpected end of file found
MMTimer.h文件
class CMMTimer
{
public:
CMMTimer();
virtual ~CMMTimer();
BOOL SetMMTimer(UINT nInterval, UINT nResolution);
void KillMMTimer();
UINT nTimerRes, nTimerID;
};
新CMMTimer的MMTimer.cpp文件
void PASCAL MMTimerProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1,DWORD dw2);
CMMTimer::CMMTimer() {}
CMMTimer::~CMMTimer() {}
BOOL CMMTimer::SetMMTimer(UINT nInterval, UINT nResolution
{
TIMECAPS tc;
nTimerRes = nResolution;
if (timeGetDevCaps(&tc, sizeof(TIMECAPS))==TIMERR_NOERROR)
{
if(nTimerRes!=min(max(tc.wPeriodMin, nTimerRes), tc.wPeriodMax))
return FALSE;
}
if(timeBeginPeriod(nTimerRes)==TIMERR_NOERROR)
{
nTimerID = timeSetEvent(nInterval, nTimerRes, MMTimerProc, NULL,TIME_PERIODIC);
if(!nTimerID)
return TRUE;
else
return FALSE;
}
else
return FALSE;
}
void CMMTimer::KillMMTimer()
{
if(nTimerID)
{
timeKillEvent(nTimerID);
nTimerID = 0;
}
timeEndPeriod(nTimerRes);
}
void PASCAL MMTimerProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1,DWORD dw2)
{
UpdateFrame();
}
1.UINT、DWORD等数据类型其实都是微软定义的,不是标准的C++数据类型。
2.包括的文件少了,比如对TIMECAPS的声明文件,timeGetDevCaps的函数声明文件等。
我现在已经给你改好了第一个问题,第二个问题请自己包含你的某些 .h文件到实现文件中。
//MMTimer.h文件
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORTclass CMMTimer
{
public:
CMMTimer();
virtual ~CMMTimer();
BOOL SetMMTimer(UINT nInterval, UINT nResolution);
void KillMMTimer();
UINT nTimerRes, nTimerID;
};
void PASCAL MMTimerProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1,DWORD dw2);
//MMTimer.cpp文件
#include "test3.h"
//在这个地方需要增加另外一些.h文件
CMMTimer::CMMTimer() {}
CMMTimer::~CMMTimer() {}
BOOL CMMTimer::SetMMTimer(UINT nInterval, UINT nResolution)
{
TIMECAPS tc;
nTimerRes = nResolution;
if (timeGetDevCaps(&tc, sizeof(TIMECAPS))==TIMERR_NOERROR)
{
if(nTimerRes!=min(max(tc.wPeriodMin, nTimerRes), tc.wPeriodMax))
return FALSE;
}
if(timeBeginPeriod(nTimerRes)==TIMERR_NOERROR)
{
nTimerID = timeSetEvent(nInterval, nTimerRes, MMTimerProc, NULL,TIME_PERIODIC);
if(!nTimerID)
return TRUE;
else
return FALSE;
}
else
return FALSE;
}
void CMMTimer::KillMMTimer( )
{
if(nTimerID)
{
timeKillEvent(nTimerID);
nTimerID = 0;
}
timeEndPeriod(nTimerRes);
}
void PASCAL MMTimerProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1,DWORD dw2)
{
UpdateFrame();
}
class type 选generic class
添上名字,按确定
windows.h以及mmsystem.h,也就是(MMTimer.cpp):
#include <windows.h>
#include <mmsystem.h>
#include "MMtimer.h"void CALLBACK MMTimerProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1,
DWORD dw2);
CMMTimer::CMMTimer() {}
CMMTimer::~CMMTimer() {}//.......中间省略void CALLBACK MMTimerProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1,
DWORD dw2)
{
UpdateFrame();
}
#include "stdafx.h" //need support of MFC
#include XXX.h
...
顺序不能错。
.h文件本来就不能够编译的啊!!!!!
只有实现文件才能够编译,比如 .cpp文件。
我给你写的那一个是在我现在知道的一些情况的前提下写出来的。还是有一些错误,但这个错误我改比了啊,我不知道那些声明你方在哪个文件里面。
http://www.gjwtech.com/scomm/sc2vc6highspeedcom.htm这里面有一个我需要的timeSetEvent()函数,哪里知道却不好用.
分数没什么关系的。我有空的时候尽快给你写一份例子代码吧。