诸位大侠,小弟新学编程,今日想在已有的工程中加入一新类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();
}

解决方案 »

  1.   

    补充一句,若在MMTimer.CPP中#include "MMTimer.h",错误就变得更多了。
      

  2.   

    你把PASCAL换成WINAPI试试。好像不要也可以吧
      

  3.   

    ATField兄,将PASCAL换成WINAPI和去掉都还是老样子。
      

  4.   

    你这个程序存在的问题
    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();
    }
      

  5.   

    添加类的时候推荐使用vc菜单-〉insert->class
    class type 选generic class
    添上名字,按确定
      

  6.   

    任杰大哥,为什么我往MMTimer.h文件中加东西时却不让加,编译时出现no compile tools is associated with the file extension?
      

  7.   

    将 PASCAL 换成 CALLBACK 试试看。另外,需要在MMTimer.cpp的开始,包含头文件
    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();
    }
      

  8.   

    CPP头上这么包含:
    #include "stdafx.h"  //need support of MFC
    #include XXX.h 
    ...
    顺序不能错。
      

  9.   

    to steve_shun(steve) :
    .h文件本来就不能够编译的啊!!!!!
    只有实现文件才能够编译,比如 .cpp文件。
    我给你写的那一个是在我现在知道的一些情况的前提下写出来的。还是有一些错误,但这个错误我改比了啊,我不知道那些声明你方在哪个文件里面。
      

  10.   

    StdAfx(任杰)兄,小弟是想把下面网页上的内容放到一个另外的工程(未用MFC)中.
    http://www.gjwtech.com/scomm/sc2vc6highspeedcom.htm这里面有一个我需要的timeSetEvent()函数,哪里知道却不好用.
      

  11.   

    各位大侠,这里的分太少,小弟的另一个帖子有100分要散,http://expert.csdn.net/Expert/topic/1483/1483536.xml?temp=.8721277,跟本帖的问题是同一个,请到那里接分吧.
      

  12.   

    to steve_shun(steve) :
    分数没什么关系的。我有空的时候尽快给你写一份例子代码吧。