tw2050
驱动牛犊
驱动牛犊
  • 注册日期2004-02-10
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望49点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:1497回复:3

各位大侠帮小弟看看这代码是什么回事?重谢!

楼主#
更多 发布于:2004-04-12 09:37
以下是我按一本教材写下的代码,但编译时出了些问题,请各们大侠们帮忙看一下。
   这是port.cpp文件
#define DEVICE_MAIN
#include \"port.h\"
Declare_Virtual_Device(PORT)
#undef DEVICE_MAIN

int MyPort::Count;
int MyPort::Num;
PortStruct *MyPort::pBuffer;
class MyPort::MyPort(WORD port):VIOPort(port)
{
if (Num=0)pBuffer=new PortStruct[COUNT];
Num++;
hook();
}
class MyPort::MyPort()
{
Num--;
if (Num==0) delete pBuffer;
}
DWORD MyPort :: handler(VMHANDLE hVM, DWORD port,
  CLIENT_STRUCT *pRegs,    DWORD iotype, DWORD outdata)
{
char data;
switch(iotype)
{
case BYTE_INPUT:
pBuffer[Count].wPort=port;
data=_inp(port);
pBuffer[Count].wVal=data;
pBuffer[Count].bInput=TRUE;
if (++Count==COUNT)Count=COUNT;
return data;
    case BYTE_OUTPUT:
pBuffer[Count].wPort=port;
data=_outp(port,outdata);
        pBuffer[Count].vVal=data;
pBuffer[Count].bInput=FALSE;
        if (++Count=COUNT)Count=COUNT;
return data;
}
   return 0;
}
PortDevice::PortDevice()
{
p378=p379=p37A=0;
}
PortVM::PortVM(VMHANDLE hVM) : VVirtualMachine(hVM) {}

PortThread::PortThread(THREADHANDLE hThread) : VThread(hThread) {}

DWORD PortDevice::OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams)
{
int i;
switch(pDIOCParams->dioc_IOCtlCode)
{
case DIOC_OPEN:
p378=new MyPort(0x378);
p379=new MyPort(0x379);
p37A=new Myport(0x37A);
break;
case DIOC_CLOSEHANDLE:
if(p378){delete p378;p378=0;}
if(p379){delete p379;p379=0;}
if(p37A){delete p37A;p37A=0;}
break;
    case 111:
int size=pDIOCParams->dioc_cbOutBuf;
size=MyPort::Count<size?MyPort::Count:size;
memcpy(pDIOCParams->dioc_OutBuf,MyPort::pBuffer,size* sizeof(PortStruct));
*pDIOCParam->dioc_bytesret=size;
break;
}
      return 0;
}
这是port.h文件:
#include <vtoolscp.h>

#define DEVICE_CLASS PortDevice
#define PORT_DeviceID UNDEFINED_DEVICE_ID
#define PORT_Init_Order UNDEFINED_INIT_ORDER
#define PORT_Major 1
#define PORT_Minor 0
#define COUNT  65535

struct PortStruct {WORD wPort; WORD wVal; BOOL bInput;};
class MyPort : public VIOPort
{
   public:
       MyPort(WORD Port);
  ~MyPort();
  DWORD VIOPort :: handler(VMHANDLE hVM, DWORD port,
  CLIENT_STRUCT* pRegs,    DWORD iotype, DWORD outdata);
  static int Count;
  static PortStruct *pBuffer;
  static int Num;
};

class PortDevice : public VDevice
{
public:
PortDevice();
virtual DWORD OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams);
MyPort *p378, *p379,*p37A;
};

class PortVM : public VVirtualMachine
{
public:
PortVM(VMHANDLE hVM);
};

class PortThread : public VThread
{
public:
PortThread(THREADHANDLE hThread);
};
tw2050
驱动牛犊
驱动牛犊
  • 注册日期2004-02-10
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望49点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-12 11:47
不好意思,以下是编译时出现的错误请大侠指点指点,谢谢!

 set INCLUDE= .;F:\\PROGRA~1\\DRIVER~2\\VTOOLSD\\INCLUDE;F:\\PROGRA~1\\DRIVER~2\\VTOOLSD\\INCLUDE\\DAA;
 set CL= -c -nologo -GB -GF -Gy -Gs -Zp1 -DWANTVXDWRAPS -DVTOOLSD -DALT_INIT_SEG -DIS_32 -DNTVERSION=\'WDM\' -DVXD_COMPATLIB /Od /Oi -Zi -FdPORT.PDB -DDEBUG=1 -DWIN40 -DWIN40_OR_LATER -DWFW311_OR_LATER  /DALT_INIT_SEG /Foport.OBJ
 F:\\MICROS~1\\VC98\\bin\\CL.EXE .\\port.cpp
port.cpp
.\\port.h(19) : error C2838: illegal qualified name in member declaration
.\\port.cpp(77) : fatal error C1004: unexpected end of file found
NMAKE : fatal error U1077: \'F:\\MICROS~1\\VC98\\bin\\CL.exe\' : return code \'0x2\'
Stop.
Error executing NMAKE.

PORT1.EXE - 3 error(s), 0 warning(s)

\\port.h(19) : error C2838: illegal qualified name in member declaration  是指 DWORD VIOPort::handler(VMHANDLE hVM, DWORD port,
  CLIENT_STRUCT *pRegs,    DWORD iotype, DWORD outdata);出错了,但我总是找不到错在哪里?
还有后面两个错误也不知道是什么造成的?



[编辑 -  4/12/04 by  tw2050]

[编辑 -  4/12/04 by  tw2050]
y5318
驱动中牛
驱动中牛
  • 注册日期2001-09-18
  • 最后登录2018-05-29
  • 粉丝1
  • 关注0
  • 积分14分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2004-04-12 17:03
\'member\' : illegal qualified name in member declaration
A class, structure, or union uses a fully qualified name to redeclare a member of another class, structure, or union.
Example
// C2838.cpp
class Bellini
{
public:
    Norma();
};
class Bottesini
{
    Bellini::Norma();  // C2838

};
在copy时有没有错
tw2050
驱动牛犊
驱动牛犊
  • 注册日期2004-02-10
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望49点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-13 08:01
  关于这个问题我已解决了。谢谢!但是对于\"Unexpect end of file found\" 不知什么回事,难道写VxD对文件结束还有约束。

另外return code 0x2,是什么意思?
游客

返回顶部