关于<conio.h>的问题 请问在win2000下能够引用上述的头文件吗,如何引用?因为我要用到其中的 int _outp( unsigned short port, int databyte ); 函数,请问vc在win2000下有没有类似的函数,需要调用什么头文件 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当然可以了,不就是用conio.h中的函数嘛。在2000下的VC 也用这个文件的。 这个文件只要你装了VC就有的,把文件所在的路径include进去就行了。 conio.h是标准的C库文件,与2K无关。_outp在2K下不能使用,要读写硬件,如串口,磁盘要用CreateFile/WriteFile/ReadFile/DeviceIOControl 等几个函数,你可以查MSDN。 直接 #include <conio.h>就可以了; 我是在写串口程序,vc写的dll中包含该函数,编译后,用vb程序调用,读该串口的数据。该系统在98下调用成功,在win2000下,报“应用程序正常初始化(0xc00000ba)失败。”的错误 SoLike(是我) :你好 能不能举个读取串口数据的例子。 SoLike(是我) :能不能举一个DeviceIOControl 函数控制串口的例子 http://expert.csdn.net/Expert/topic/1956/1956624.xml?temp=.4726068相似的问题,楼主可以看看; penter(净土) 你好,可是并没有给出win2k下的相关流程呀? 大致流程如下://打开串口HANDLE m_hFile = CreateFile((LPCTSTR)m_strPort, GENERIC_READ | GENERIC_WRITE, 0, // exclusive access NULL, // no security attrs OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );if(m_hFile==INVALID_HANDLE_VALUE){ TRACE("端口无法打开!"); return;}//进行设置DCB dcb;//DCB结构定义了串行通信的控制信息 dcb.DCBlength = sizeof(DCB);GetCommState(m_hFile,&dcb);//得到当前通信设备的控制信息//设置波特率dcb.BaudRate = 4800;//设置通信位字节数dcb.ByteSize = 8; dcb.Parity = EVENPARITY;//设置校验方式,偶dcb.StopBits = 1;//设置停止位字节数dcb.fOutxDsrFlow = TRUE;dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;dcb.fOutxCtsFlow = TRUE;dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; dcb.fOutxCtsFlow = FALSE;dcb.fRtsControl = RTS_CONTROL_ENABLE; dcb.fInX = TRUE;dcb.fOutX = TRUE; dcb.XonChar = 0X11;dcb.XoffChar = 0X13;dcb.XonLim = 100;dcb.XoffLim = 100;dcb.fBinary = TRUE;dcb.fParity = TRUE;SetCommState(m_hFile,&dcb);//设置控制信息 COMMTIMEOUTS CommTimeOuts;//用于SetCommTimeouts和GetCommTimeouts函数来设置和获得通讯设备的超时参数CommTimeOuts.ReadIntervalTimeout = 1000;CommTimeOuts.ReadTotalTimeoutMultiplier = 12000/dcb.BaudRate + 1;CommTimeOuts.ReadTotalTimeoutConstant = 1000;CommTimeOuts.WriteTotalTimeoutMultiplier = 12000/dcb.BaudRate + 1;CommTimeOuts.WriteTotalTimeoutConstant = 1000;SetCommTimeouts(m_hFile,&CommTimeOuts);SetupComm(m_hFile,2048,2048);//设输入输出缓冲大小PurgeComm(m_hFile,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);//刷新输出缓冲区//发数据BYTE pSend[20];memset(pSend, 1, 20);DWORD dwLengthW = 0;if(WriteFile(m_hFile,pSend,20,&dwLengthW,NULL)==FALSE){ DWORD dwErrorNo = GetLastError(); if(dwErrorNo) { TRACE("数据发送时错误,错误码:%lu",dwErrorNo); }}//读数据BYTE pRead[20];memset(pRead, 0, 20); DWORD dwLengthR = 0;if(ReadFile(m_hFile,pRXData,10,&dwLengthR ,NULL)==FALSE){ DWORD dwErrorNo = GetLastError(); if(dwErrorNo) { TRACE("数据接收时错误,错误码:%lu",dwErrorNo); }}// 关串口EscapeCommFunction(m_hFile,CLRDTR);PurgeComm(m_hFile,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);CloseHandle(m_hFile); 上面只是给出一个流程,很多参数事实上无须全部设置,如超时限制、DCB的某些成员等。由于仓促,上面的代码也许错误很多,你需要看MSDN来得到等多的信息。此外,串口通讯的控制方式也很多,如通过事件、定时器、轮询,多线程等等,你可以查考一下相关的资料来选择自己合适的方式 SoLike(是我) ,那关于并口的呢?谢谢 主要问题是:因为_outp在2K下不能使用,能不能在2000下找一个的函数替代它,若有请给出例子 to tjyuanl(涟漪) 流程在杂志上;----- 这是.cpp文件的内容:#include <windows.h>#include <conio.h>HANDLE HinstHandle;BOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved){ switch (dwReason) { case DLL_PROCESS_ATTACH: { HinstHandle = hDLL; break; } case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; }return TRUE;}WORD WINAPI out_byte (unsigned short port,unsigned short data){ _outp(port,data); return 0;}WORD WINAPI out_word (unsigned short port,unsigned short data){ _outpw(port,data); return 0;}WORD WINAPI in_byte (unsigned short port){ return _inp(port); return 0;}WORD WINAPI in_word (unsigned short port){ return _inpw(port); return 0;}BOOL CALLBACK VBDLLProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){ switch (msg) { case WM_COMMAND: EndDialog(hDlg, TRUE); return (TRUE); } return (FALSE);}这是.def的内容: LIBRARY VBDLLCODE PRELOAD MOVEABLE DISCARDABLEDATA PRELOAD SINGLEEXPORTS out_byte @2 out_word @3 in_byte @4 in_word @5 VBDLLProc @6这是我的dll的源代码,用vb调用该dll文件,在98下通过,在2000下,报“应用程序正常初始化(0xc00000ba)失败。”的错误,请问我将如何对其进行修改? 请大家看看代码写的有哪些错误。 怎么样通过WIN32API来创建一个线程的消息队列啊? 文件读取问题 程序退出时崩溃 请高手过来看看 workspace的 classview, resourceview, fileview三个的区别? Dialog 变大变小的问题?烦烦烦!难难难! 高分求~!哪有多线程写文件的方法,像写IIS日志文件一样。同一时间有多个线程来向文件里写数据(一行) vc问题,请各位给予帮助 CFileDialog怎么设置过滤条件? 关于多线程文件传输 _T 是什么意思?怎么用? 关于字符显示
在2000下的VC 也用这个文件的。
CreateFile/WriteFile/ReadFile/DeviceIOControl 等几个函数,你可以查MSDN。
HANDLE m_hFile = CreateFile((LPCTSTR)m_strPort,
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security attrs
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL );
if(m_hFile==INVALID_HANDLE_VALUE)
{
TRACE("端口无法打开!");
return;
}//进行设置DCB dcb;//DCB结构定义了串行通信的控制信息
dcb.DCBlength = sizeof(DCB);
GetCommState(m_hFile,&dcb);//得到当前通信设备的控制信息//设置波特率
dcb.BaudRate = 4800;
//设置通信位字节数
dcb.ByteSize = 8;
dcb.Parity = EVENPARITY;//设置校验方式,偶
dcb.StopBits = 1;//设置停止位字节数dcb.fOutxDsrFlow = TRUE;
dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;dcb.fOutxCtsFlow = TRUE;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
dcb.fOutxCtsFlow = FALSE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
dcb.fInX = TRUE;
dcb.fOutX = TRUE;
dcb.XonChar = 0X11;
dcb.XoffChar = 0X13;
dcb.XonLim = 100;
dcb.XoffLim = 100;dcb.fBinary = TRUE;
dcb.fParity = TRUE;SetCommState(m_hFile,&dcb);//设置控制信息
COMMTIMEOUTS CommTimeOuts;//用于SetCommTimeouts和GetCommTimeouts函数来设置和获得通讯设备的超时参数
CommTimeOuts.ReadIntervalTimeout = 1000;
CommTimeOuts.ReadTotalTimeoutMultiplier = 12000/dcb.BaudRate + 1;
CommTimeOuts.ReadTotalTimeoutConstant = 1000;
CommTimeOuts.WriteTotalTimeoutMultiplier = 12000/dcb.BaudRate + 1;
CommTimeOuts.WriteTotalTimeoutConstant = 1000;SetCommTimeouts(m_hFile,&CommTimeOuts);SetupComm(m_hFile,2048,2048);//设输入输出缓冲大小PurgeComm(m_hFile,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);//刷新输出缓冲区//发数据
BYTE pSend[20];
memset(pSend, 1, 20);
DWORD dwLengthW = 0;
if(WriteFile(m_hFile,pSend,20,&dwLengthW,NULL)==FALSE)
{
DWORD dwErrorNo = GetLastError();
if(dwErrorNo)
{
TRACE("数据发送时错误,错误码:%lu",dwErrorNo);
}
}//读数据
BYTE pRead[20];
memset(pRead, 0, 20);
DWORD dwLengthR = 0;
if(ReadFile(m_hFile,pRXData,10,&dwLengthR ,NULL)==FALSE)
{
DWORD dwErrorNo = GetLastError();
if(dwErrorNo)
{
TRACE("数据接收时错误,错误码:%lu",dwErrorNo);
}
}// 关串口
EscapeCommFunction(m_hFile,CLRDTR);
PurgeComm(m_hFile,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
CloseHandle(m_hFile);
此外,串口通讯的控制方式也很多,如通过事件、定时器、轮询,多线程等等,你可以查考一下相关的资料来选择自己合适的方式
#include <windows.h>
#include <conio.h>HANDLE HinstHandle;BOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
{
HinstHandle = hDLL;
break;
} case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH:
break; case DLL_PROCESS_DETACH:
break;
}return TRUE;
}
WORD WINAPI out_byte (unsigned short port,unsigned short data)
{
_outp(port,data);
return 0;
}WORD WINAPI out_word (unsigned short port,unsigned short data)
{
_outpw(port,data);
return 0;
}WORD WINAPI in_byte (unsigned short port)
{
return _inp(port);
return 0;
}WORD WINAPI in_word (unsigned short port)
{
return _inpw(port);
return 0;
}
BOOL CALLBACK VBDLLProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_COMMAND: EndDialog(hDlg, TRUE);
return (TRUE);
}
return (FALSE);
}这是.def的内容:
LIBRARY VBDLLCODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD SINGLEEXPORTS
out_byte @2
out_word @3
in_byte @4
in_word @5
VBDLLProc @6这是我的dll的源代码,用vb调用该dll文件,在98下通过,在2000下,报“应用程序正常初始化(0xc00000ba)失败。”的错误,请问我将如何对其进行修改?