首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

C++builder怎么实现并口通信

2012-03-31 
C++builder如何实现并口通信我想编一个并口通信的软件,接受别的设备通过并口发给打印机的数据,将打印的内

C++builder如何实现并口通信
我想编一个并口通信的软件,接受别的设备通过并口发给打印机的数据,将打印的内容存在计算机里。想问问如何进行并口编程,在WinXp下进行。
有没有讲BCB并口通信的教程呢,我只有串口通信的教程。

[解决办法]
C# 操作并口类,并口通信 
c#已提供了串口通信组件SerialPort,但是C#并没有提供直接的并口通信组件,只好通过调用API来与并口通信 

using System;
using System.Runtime.InteropServices;
namespace LptPrint_test
{
/// <summary>
/// LPTControl 的摘要说明。
/// </summary>
public class LPTControl
{
private string LptStr = "lpt1";
public LPTControl(string l_LPT_Str)
{
//
// TODO: 在此处添加构造函数逻辑
//
LptStr = l_LPT_Str;
}
[StructLayout(LayoutKind.Sequential)]
private struct OVERLAPPED
{
int Internal;
int InternalHigh;
int Offset;
int OffSetHigh;
int hEvent;

[DllImport("kernel32.dll")]
private static extern int CreateFile(string lpFileName, uint dwDesiredAccess, int dwShareMode, int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile);
[DllImport("kernel32.dll")]
private static extern bool WriteFile(int hFile, byte[] lpBuffer, int nNumberOfBytesToWrite, ref int lpNumberOfBytesWritten, ref OVERLAPPED lpOverlapped);
[DllImport("kernel32.dll")]
private static extern bool CloseHandle(int hObject);
private int iHandle;
public bool Open()
{
iHandle = CreateFile(LptStr, 0x40000000, 0, 0, 3, 0, 0);
if (iHandle != - 1)
{
return true;
}
else
{
return false;
}
}
public bool Write(String Mystring)
{
if (iHandle != - 1)
{
OVERLAPPED x = new OVERLAPPED();
int i = 0;
byte[] mybyte = System.Text.Encoding.Default.GetBytes(Mystring);
bool b = WriteFile(iHandle, mybyte, mybyte.Length, ref i, ref x);
return b;
}
else
{
throw new Exception("不能连接到打印机!");
}
}
public bool Write(byte[] mybyte)
{
if (iHandle != - 1)
{
OVERLAPPED x = new OVERLAPPED();
int i = 0;
WriteFile(iHandle, mybyte, mybyte.Length, ref i, ref x);
return true;
}
else
{
throw new Exception("不能连接到打印机!");
}
}
public bool Close()
{
return CloseHandle(iHandle);
}
}


[解决办法]
用WinIO应该可以实现
[解决办法]
用winIO,我用过。可以实现PLT口控制。很好用
[解决办法]
/*

//从并行端口读取打印机状态
function GetPrinterStatus:byte;
asm
MOV DX,$379;
IN AL,DX;
end;
//获取打印机是否出错
function CheckPrinter:boolean;
var
temp:byte;
begin
temp:=GetPrinterStatus;
Result:=not ( ((temp and $80)=0) //打印机忙
or ((temp and $20)<>0) //打印机缺纸
or ((temp and $10)=0) //打印机未联机
or ((temp and $08)=0) ); //打印机出错;
end;

*/
unsigned char GetPrinterStatus()
{
asm
{
MOV DX,0x379

}
}
bool LptPrint(char prtdata[],int prtlen,int timeout)
{
HANDLE h;
DWORD n;
COMMTIMEOUTS t;
bool result=true;
try
{
h = CreateFile("lpt1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
if (h == INVALID_HANDLE_VALUE){
//AfxMessageBox("Can not open lpt1");
return false;
}



t.ReadIntervalTimeout = 0;
t.ReadTotalTimeoutMultiplier = 0;
t.ReadTotalTimeoutConstant = 0;
t.WriteTotalTimeoutMultiplier = timeout * 1000 / prtlen;
t.WriteTotalTimeoutConstant = 0;
if (!SetCommTimeouts(h,&t)){
//AfxMessageBox("SetCommTimeout error");
return false;
}
result = true;
 /* if (!WriteFile(h,prtdata,prtlen,&n,NULL)){
//AfxMessageBox("Print error");
result = false;
}
 */
CloseHandle(h);

}
catch(...)
{

}
return result;
}
//-------------------------------------------------------
[解决办法]
楼主说的所有都可以用WinIO解决
[解决办法]
下载一个io.dll,inpout32.dll看看有没你的想要的东西..

热点排行