关于的问题

tjyuanl 2003-07-09 04:42:01
请问在win2000下能够引用上述的头文件吗,如何引用?

因为我要用到其中的 int _outp( unsigned short port, int databyte ); 函数,
请问vc在win2000下有没有类似的函数,需要调用什么头文件
...全文
93 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjyuanl 2003-07-10
  • 打赏
  • 举报
回复
这是.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 VBDLL

CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD SINGLE

EXPORTS
out_byte @2
out_word @3
in_byte @4
in_word @5
VBDLLProc @6

这是我的dll的源代码,用vb调用该dll文件,在98下通过,在2000下,报“应用程序正常初始化(0xc00000ba)失败。”的错误,请问我将如何对其进行修改?
penter 2003-07-09
  • 打赏
  • 举报
回复
to tjyuanl(涟漪)

流程在杂志上;-----
cauiot 2003-07-09
  • 打赏
  • 举报
回复
re
nuaawenlin 2003-07-09
  • 打赏
  • 举报
回复
DevicIoControl()
tjyuanl 2003-07-09
  • 打赏
  • 举报
回复
主要问题是:因为_outp在2K下不能使用,能不能在2000下找一个的函数替代它,若有请给出例子
tjyuanl 2003-07-09
  • 打赏
  • 举报
回复
SoLike(是我) ,那关于并口的呢?谢谢
思危 2003-07-09
  • 打赏
  • 举报
回复
上面只是给出一个流程,很多参数事实上无须全部设置,如超时限制、DCB的某些成员等。

由于仓促,上面的代码也许错误很多,你需要看MSDN来得到等多的信息。
此外,串口通讯的控制方式也很多,如通过事件、定时器、轮询,多线程等等,你可以查考一下相关的资料来选择自己合适的方式
思危 2003-07-09
  • 打赏
  • 举报
回复
大致流程如下:

//打开串口
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);
tjyuanl 2003-07-09
  • 打赏
  • 举报
回复
penter(净土) 你好,可是并没有给出win2k下的相关流程呀?
penter 2003-07-09
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1956/1956624.xml?temp=.4726068

相似的问题,楼主可以看看;
tjyuanl 2003-07-09
  • 打赏
  • 举报
回复
SoLike(是我) :能不能举一个DeviceIOControl 函数控制串口的例子
tjyuanl 2003-07-09
  • 打赏
  • 举报
回复
SoLike(是我) :你好

能不能举个读取串口数据的例子。
tjyuanl 2003-07-09
  • 打赏
  • 举报
回复
我是在写串口程序,vc写的dll中包含该函数,编译后,用vb程序调用,读该串口的数据。该系统在98下调用成功,在win2000下,报“应用程序正常初始化(0xc00000ba)失败。”的错误
penter 2003-07-09
  • 打赏
  • 举报
回复
直接 #include <conio.h>就可以了;
思危 2003-07-09
  • 打赏
  • 举报
回复
conio.h是标准的C库文件,与2K无关。

_outp在2K下不能使用,要读写硬件,如串口,磁盘要用
CreateFile/WriteFile/ReadFile/DeviceIOControl 等几个函数,你可以查MSDN。
c0der 2003-07-09
  • 打赏
  • 举报
回复
这个文件只要你装了VC就有的,把文件所在的路径include进去就行了。
c0der 2003-07-09
  • 打赏
  • 举报
回复
估计你是写串口程序了。
c0der 2003-07-09
  • 打赏
  • 举报
回复
当然可以了,不就是用conio.h中的函数嘛。
在2000下的VC 也用这个文件的。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧