求BCB环境下API的串口编程源代码
一个简单的小工程DEMO代码就可以了
一定是要API的,不要PCOMM.DLL,MSCOMM.DLL等控件
谢谢
我的邮箱是lfw@gotogk.com
要多少分吼下好了,感激不尽
[解决办法]
http://www.ccrun.com/view.asp?id=420
[解决办法]
http://www.bianceng.cn/Programming/cplus/jc/200801/6883.htm
[解决办法]
这也有一个,但不知道用什么语言写的,我也没看,如果上面的不行就试试这个吧
http://download.csdn.net/source/640848
[解决办法]
www.cppfans.com上有一个开放源码的
[解决办法]
//------------------------------
Unit1.cpp
//------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE hComm;
//------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (hComm!=INVALID_HANDLE_VALUE) CloseHandle(hComm);
exit(EXIT_SUCCESS);
}
//------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *ComNo;
DCB dcb;
String Temp;
//取得要打开的通讯端口。
Temp = "COM"+IntToStr(rdCOM->ItemIndex +1);
//转换至指针类型Char。
ComNo = Temp.c_str();
hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, 0);
if (hComm == INVALID_HANDLE_VALUE) // 如果通讯端口未打开
{
MessageBox(0, "打开通讯端口错误!!","Comm Error",MB_OK);
return;
}
//
GetCommState(hComm,&dcb); // 获得当前通讯端口状态。
dcb.BaudRate = CBR_9600; // 设置速率为9600
dcb.ByteSize = 8; // 字节为8 bit
dcb.Parity = NOPARITY; // Parity 为 None
dcb.StopBits = ONESTOPBIT; // 1 个 Stop bit
//端口设置。
if (!SetCommState(hComm, &dcb)) { // 设置通讯端口状态
MessageBox (0, "通讯端口错误!!!","Set Error",MB_OK);
CloseHandle(hComm);
return;
}
}
//------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
String Temp;
char *SendData;
int ln;
unsigned long lrc,BS;
if (hComm==0) return; //检查Handle值
Temp = mSend->Text;//取得要发送的字符串
SendData = Temp.c_str(); //字符串转换
//取得要发送的字符串数。
BS = Temp.Length();
//BS = StrLen(SendData); //也可以用此方法取得要发送的字符串长度。
//实际的发送动作。
WriteFile(hComm,SendData,BS, &lrc,NULL); // 发送数据。
}
//------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
String Temp;
char inbuff[1024];
DWORD nBytesRead, dwEvent, dwError;
COMSTAT cs;
//取得状态
ClearCommError(hComm,&dwError,&cs);
// 数据是否大于我们准备的缓冲区
if (cs.cbInQue > sizeof(inbuff))
{
PurgeComm(hComm, PURGE_RXCLEAR); // 清除通讯端口数据。
return;
}
ReadFile(hComm, inbuff,cs.cbInQue,&nBytesRead,NULL); //接收通讯端口的数据。
//数组中的字符串接尾处接上\0.
inbuff[cs.cbInQue]= '\0';
//将数组显示在MEMO1上。
mReceive->Text = inbuff;
}
//------------------------------
Unit1.H
//------------------------------
#ifndef Unit1H
#define Unit1H
//------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//------------------------------
class TForm1 : public TForm
{
__published:// IDE-managed Components
TRadioGroup *rdCOM;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TButton *Button4;
TMemo *mSend;
TMemo *mReceive;
TLabel *Label1;
TLabel *Label2;
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Button4Click(TObject *Sender);
private:// User declarations
public:// User declarations
__fastcall TForm1(TComponent* Owner);
};
//------------------------------
extern PACKAGE TForm1 *Form1;
//------------------------------
#endif
[解决办法]