阅读:1497回复:3
各位大侠帮小弟看看这代码是什么回事?重谢!
以下是我按一本教材写下的代码,但编译时出了些问题,请各们大侠们帮忙看一下。
这是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); }; |
|
沙发#
发布于: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] |
|
板凳#
发布于: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时有没有错 |
|
地板#
发布于:2004-04-13 08:01
关于这个问题我已解决了。谢谢!但是对于\"Unexpect end of file found\" 不知什么回事,难道写VxD对文件结束还有约束。
另外return code 0x2,是什么意思? |
|