| 查看: 2185 | 回复: 15 | ||
leafmavis木虫 (文坛精英)
|
[求助]
VC++中如何应用porttalk
|
|
有个实验,是控制一个电动台做旋转运动(这部分VC++源代码由产品的制造商提供),从而给实验动物刺激,同时采集动物的脑电。我们想在旋转运动的开始和结束的时候,分别给并口一秒钟的高电平,以便在脑电信号采集系统上打上同步标记。我们做了一个并口的流水灯以验证并口操作的可靠性。用C++bulider 6.0时,利用PortTalk能控制流水灯工作;但用VC++ 6.0时,报错。因电动台的源码是VC++ 6.0,所以想请教高手。谢谢! 下面是单纯的并口操作验证: 1、用C++bulider时,在工程目录下拷进这两个文件:PortTalk.sys; PortTalk.h。在Form中添加一个按键(功能为:使并口输出脉宽为1秒的高电平),并在Form中添加了并口初始化(因为计算机开机时并口各数据位是高电平,初始化就是将所有数据位置低)。程序运行正常,流水灯的开闭正常。 2、用VC++时,操作同上,但编译时报错。想请问一下,在VC++下如何使用PortTalk ?网上没说PortTalk不能用于VC++呀 --------------------Configuration: fang1 - Win32 Debug-------------------- Compiling resources... Compiling... StdAfx.cpp Compiling... fang1.cpp fang1Dlg.cpp e:\work\vc\learn1\fang1\porttalk.h(41) : error C2065: 'ShowMessage' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(80) : error C2065: 'SC_HANDLE' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(80) : error C2146: syntax error : missing ';' before identifier 'SchSCManager' e:\work\vc\learn1\fang1\porttalk.h(80) : error C2065: 'SchSCManager' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(81) : error C2146: syntax error : missing ';' before identifier 'schService' e:\work\vc\learn1\fang1\porttalk.h(81) : error C2065: 'schService' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(85) : error C2065: 'OpenSCManager' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(85) : error C2065: 'SC_MANAGER_ALL_ACCESS' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(94) : error C2065: 'OpenService' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(94) : error C2065: 'SERVICE_ALL_ACCESS' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(110) : error C2065: 'StartService' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(112) : error C2065: 'CloseServiceHandle' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(118) : error C2146: syntax error : missing ';' before identifier 'SchSCManager' e:\work\vc\learn1\fang1\porttalk.h(119) : error C2146: syntax error : missing ';' before identifier 'schService' e:\work\vc\learn1\fang1\porttalk.h(129) : error C2065: 'CreateService' : undeclared identifier Generating Code... Error executing cl.exe. fang1.exe - 15 error(s), 0 warning(s) |
» 猜你喜欢
孩子确诊有中度注意力缺陷
已经有14人回复
三甲基碘化亚砜的氧化反应
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
论文投稿,期刊推荐
已经有4人回复
请问2026国家基金面上项目会启动申2停1吗
已经有5人回复
» 本主题相关价值贴推荐,对您同样有帮助:
请问C++编译完成后形成了exe可执行文件,可是运行时报错是为什么?
已经有3人回复
[font=宋体]修改.cpp文件怎么操作[/font]
已经有3人回复
用MFC做C程序的界面
已经有7人回复
vc如何将文本内容写入编辑框中
已经有7人回复
请教VC++6.0 中CTreeCtrl,如何遍历树某个节点下面所有节点?
已经有4人回复
vc6不能用了怎么办
已经有8人回复
【讨论】用VC++来做数据库应用,哪些书比较有参考意义呢?
已经有7人回复
【求助】VC++数值算法集应用到MFC中报错,程序调试求助
已经有8人回复
【讨论】VC++
已经有12人回复
【求助】VC++.NET编程,MFC基于对话框应用程序编写
已经有18人回复
【求助】求助高手:vc中出现这两个错误如何解决?
已经有3人回复
【求助】请教运行报错分析
已经有3人回复

yalefield
金虫 (文坛精英)
老汉一枚
- 程序强帖: 3
- 应助: 129 (高中生)
- 贵宾: 0.17
- 金币: 21238.9
- 散金: 3440
- 红花: 66
- 帖子: 12101
- 在线: 759.1小时
- 虫号: 96063
- 注册: 2005-10-07
- 专业: 高等教育学
- 管辖: 计算模拟
2楼2011-05-04 08:42:37
leafmavis
木虫 (文坛精英)
- 应助: 119 (高中生)
- 金币: 7200.5
- 散金: 15392
- 红花: 13
- 帖子: 15284
- 在线: 343小时
- 虫号: 627785
- 注册: 2008-10-16
- 专业: 认知科学
|
谢谢您的回复,不过头文件是加上了的。附上C++源码,除 #include "PortTalk.h" 和最后面的按键响应函数,其他的都是自动生成的。请帮忙分析,谢谢! // fang1Dlg.cpp : implementation file // #include "stdafx.h" #include "fang1.h" #include "fang1Dlg.h" #include "PortTalk.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg: oDataExchange(CDataExchange* pDX){ CDialog: oDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CFang1Dlg dialog CFang1Dlg::CFang1Dlg(CWnd* pParent /*=NULL*/) : CDialog(CFang1Dlg::IDD, pParent) { //{{AFX_DATA_INIT(CFang1Dlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CFang1Dlg: oDataExchange(CDataExchange* pDX){ CDialog: oDataExchange(pDX);//{{AFX_DATA_MAP(CFang1Dlg) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CFang1Dlg, CDialog) //{{AFX_MSG_MAP(CFang1Dlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, OnButton1) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CFang1Dlg message handlers BOOL CFang1Dlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. 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); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control } void CFang1Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CFang1Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle 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; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CFang1Dlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CFang1Dlg::OnButton1() { // TODO: Add your control notification handler code here OpenPortTalk(); //打开地址操作 outportb(0x378,0xFF); Sleep(1000); outportb(0x378,0x00); ClosePortTalk(); //关闭地址操作 } |

3楼2011-05-04 09:12:39
sudo
木虫 (正式写手)
- 程序强帖: 16
- 应助: 6 (幼儿园)
- 金币: 1297.6
- 散金: 1486
- 红花: 20
- 帖子: 588
- 在线: 641小时
- 虫号: 1211394
- 注册: 2011-02-24
- 性别: GG
- 专业: 文艺美学
4楼2011-05-04 10:27:47
yalefield
金虫 (文坛精英)
老汉一枚
- 程序强帖: 3
- 应助: 129 (高中生)
- 贵宾: 0.17
- 金币: 21238.9
- 散金: 3440
- 红花: 66
- 帖子: 12101
- 在线: 759.1小时
- 虫号: 96063
- 注册: 2005-10-07
- 专业: 高等教育学
- 管辖: 计算模拟
5楼2011-05-04 10:49:08
leafmavis
木虫 (文坛精英)
- 应助: 119 (高中生)
- 金币: 7200.5
- 散金: 15392
- 红花: 13
- 帖子: 15284
- 在线: 343小时
- 虫号: 627785
- 注册: 2008-10-16
- 专业: 认知科学
|
当时选用PortTalk是因为这个比较简单,PortTalk是从网上下的(官网http://www.beyondlogic.org/porttalk/),而且用C++builder运行正常。下面是PortTalk.h的内容,请帮忙看一下,谢谢! < #ifndef _PORTTALK_H_ #define _PORTTALK_H_ #include //--------------------------------------------------------------------------- //32768-65535 are reserved for customers #define PORTTALK_TYPE 40000 // The IOCTRL function codes from 0x800 to 0xFFF are for customer use #define IOCTL_IOPM_RESTRICT_ALL_ACCESS CTL_CODE(PORTTALK_TYPE, 0x900, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_IOPM_ALLOW_EXCUSIVE_ACCESS CTL_CODE(PORTTALK_TYPE, 0x901, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_SET_IOPM CTL_CODE(PORTTALK_TYPE, 0x902, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_ENABLE_IOPM_ON_PROCESSID CTL_CODE(PORTTALK_TYPE, 0x903, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_READ_PORT_UCHAR CTL_CODE(PORTTALK_TYPE, 0x904, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_WRITE_PORT_UCHAR CTL_CODE(PORTTALK_TYPE, 0x905, METHOD_BUFFERED, FILE_ANY_ACCESS) //--------------------------------------------------------------------------- bool OpenPortTalk(void); void ClosePortTalk(void); void outportb(unsigned short int PortAddress, unsigned char byte); unsigned char inportb(unsigned short int PortAddress); bool InstallPortTalkDriver(void); bool StartPortTalkDriver(void); //--------------------------------------------------------------------------- HANDLE PortTalk_Handle; //Handle for PortTalk Driver void outportb(unsigned short int PortAddress, unsigned char byte) { unsigned int error; DWORD BytesReturned; unsigned char Buffer[3]; unsigned short * pBuffer; pBuffer = (unsigned short *)&Buffer[0]; *pBuffer = PortAddress; Buffer[2] = byte; error = DeviceIoControl(PortTalk_Handle,IOCTL_WRITE_PORT_UCHAR,&Buffer,3,NULL,0,&BytesReturned,NULL); if(!error) ShowMessage("Error occured during outportb while talking to PortTalk driver" ;} unsigned char inportb(unsigned short int PortAddress) { unsigned int error; DWORD BytesReturned; unsigned char Buffer[3]; unsigned short * pBuffer; pBuffer = (unsigned short *)&Buffer; *pBuffer = PortAddress; error = DeviceIoControl(PortTalk_Handle,IOCTL_READ_PORT_UCHAR,&Buffer,2,&Buffer,1,&BytesReturned,NULL); if(!error) ShowMessage("Error occured during inportb while talking to PortTalk driver" ;return(Buffer[0]); } bool OpenPortTalk(void) { PortTalk_Handle = CreateFile("\\\\.\\PortTalk",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(PortTalk_Handle == INVALID_HANDLE_VALUE) { StartPortTalkDriver(); PortTalk_Handle = CreateFile("\\\\.\\PortTalk",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(PortTalk_Handle == INVALID_HANDLE_VALUE) return false; } return true; } void ClosePortTalk(void) { CloseHandle(PortTalk_Handle); } bool StartPortTalkDriver(void) { SC_HANDLE SchSCManager; SC_HANDLE schService; BOOL ret; DWORD err; SchSCManager = OpenSCManager (NULL,NULL,SC_MANAGER_ALL_ACCESS); if(SchSCManager == NULL) { if(GetLastError() == ERROR_ACCESS_DENIED) ShowMessage("安装驱动PortTalk.sys,需要管理员的权限!" ;return false; } do{ schService = OpenService(SchSCManager,"PortTalk",SERVICE_ALL_ACCESS); if (schService == NULL) { switch(GetLastError()) { case ERROR_ACCESS_DENIED: return false; case ERROR_INVALID_NAME: return false; case ERROR_SERVICE_DOES_NOT_EXIST: InstallPortTalkDriver(); break; } } }while (schService == NULL); ret = StartService(schService,0,NULL); if(ret == NULL) return false; CloseServiceHandle (schService); return true; } bool InstallPortTalkDriver(void) { SC_HANDLE SchSCManager; SC_HANDLE schService; DWORD err; CHAR DriverFileName[80]; GetSystemDirectory(DriverFileName, 55); lstrcat(DriverFileName,"\\Drivers\\PortTalk.sys" ;if(!CopyFile("PortTalk.sys", DriverFileName, FALSE)) return false; SchSCManager = OpenSCManager (NULL,NULL,SC_MANAGER_ALL_ACCESS); schService = CreateService (SchSCManager,"PortTalk","PortTalk",SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL,"System32\\Drivers\\PortTalk.sys",NULL,NULL,NULL,NULL,NULL); if(schService == NULL) return false; CloseServiceHandle (schService); return true; } //--------------------------------------------------------------------------- #endif code> |

6楼2011-05-04 14:20:15

7楼2011-05-04 14:33:45
sudo
木虫 (正式写手)
- 程序强帖: 16
- 应助: 6 (幼儿园)
- 金币: 1297.6
- 散金: 1486
- 红花: 20
- 帖子: 588
- 在线: 641小时
- 虫号: 1211394
- 注册: 2011-02-24
- 性别: GG
- 专业: 文艺美学
8楼2011-05-04 14:56:34
leafmavis
木虫 (文坛精英)
- 应助: 119 (高中生)
- 金币: 7200.5
- 散金: 15392
- 红花: 13
- 帖子: 15284
- 在线: 343小时
- 虫号: 627785
- 注册: 2008-10-16
- 专业: 认知科学
|
谢谢各位热心的回复。 加上这段后还报错。 e:\work\vc\learn1\fang1\porttalk.h(51) : error C2660: 'MessageBoxA' : function does not take 1 parameters e:\work\vc\learn1\fang1\porttalk.h(65) : error C2660: 'MessageBoxA' : function does not take 1 parameters e:\work\vc\learn1\fang1\porttalk.h(90) : error C2065: 'SC_HANDLE' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(90) : error C2146: syntax error : missing ';' before identifier 'SchSCManager' e:\work\vc\learn1\fang1\porttalk.h(90) : error C2065: 'SchSCManager' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(91) : error C2146: syntax error : missing ';' before identifier 'schService' e:\work\vc\learn1\fang1\porttalk.h(91) : error C2065: 'schService' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(95) : error C2065: 'OpenSCManager' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(95) : error C2065: 'SC_MANAGER_ALL_ACCESS' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(99) : error C2660: 'MessageBoxA' : function does not take 1 parameters e:\work\vc\learn1\fang1\porttalk.h(104) : error C2065: 'OpenService' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(104) : error C2065: 'SERVICE_ALL_ACCESS' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(120) : error C2065: 'StartService' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(122) : error C2065: 'CloseServiceHandle' : undeclared identifier e:\work\vc\learn1\fang1\porttalk.h(128) : error C2146: syntax error : missing ';' before identifier 'SchSCManager' e:\work\vc\learn1\fang1\porttalk.h(129) : error C2146: syntax error : missing ';' before identifier 'schService' e:\work\vc\learn1\fang1\porttalk.h(139) : error C2065: 'CreateService' : undeclared identifier Error executing cl.exe. fang1.exe - 17 error(s), 0 warning(s) > |

9楼2011-05-04 20:41:20
sudo
木虫 (正式写手)
- 程序强帖: 16
- 应助: 6 (幼儿园)
- 金币: 1297.6
- 散金: 1486
- 红花: 20
- 帖子: 588
- 在线: 641小时
- 虫号: 1211394
- 注册: 2011-02-24
- 性别: GG
- 专业: 文艺美学
10楼2011-05-04 21:20:31













回复此楼
oDataExchange(CDataExchange* pDX)
;