概要
- Serial library for C++を使って、シリアルポート通信
- ライブラリは LGPL、サンプルプログラムはGPL
-
Serial.lib
は Static Libで生成される => DLLにすれば、自分のプログラムは、バイナリ配布可能(だよね??)。(自分のきたないコードを世に出さなくてもよい!?)
環境
- Visual Studio 2015u3
- Serial library for C++
手順
DLL生成
- ダウンロード(
Serial_demo.zip
)、解凍(Serial
フォルダ) -
Serial/Serial.sln
をダブルクリック。=> VC起動 - プロジェクトファイルのアップグレード=>[OK]
- なんか聞かれるから、チェックをはずして、[OK]
-
Serial/Serial.h
を編集Serial/Serial.hこんな感じ// Copyright (C) 1999-2003 Ramon de Klein // (Ramon.de.Klein@ict.nl) #if DLLEXPORT_SERIAL #define DllExport __declspec( dllexport ) #else #define DllExport #endif class DllExport CSerial { // Class enumerations public: ...
Solutionエクスプローラから、
Serial
で右クリ=>プロパティ-
Solutionエクスプローラから、
Serial
で右クリ=>ビルドこんな感じ$ tree ./_Output/ ./_Output/ └── Release ├── Serial.dll ├── Serial.exp ├── Serial.iobj ├── Serial.ipdb ├── Serial.lib └── Serial.pdb 1 directory, 6 files
HelloWold
から使ってみる
- Solutionエクスプローラから
HelloWold
以外を削除 - プロパティをひらいて、
Include
(C:\VS2015\Serial\Serial)とLibrary
(C:\VS2015\Serial_Output\Release)のパスを追加 - リンカーの入力に、Serial.libを追加
- ビルド、実行 (Serial.dllLとか、exeとおなじとこおかないとだめかも)
ライブラリの使い方
こんな感じ。エラーハンドリングはうまくやれよ!
//ヘッダインクルード
#include "Serial.h"
//インスタンス
CSerial serial;
//COMポートオープン
// "\\\\.\\COMxx"だと、COM10以上使える
serial.Open(_T("\\\\.\\COM11"), 0, 0, false);
//シリアルの設定
serial.Setup(CSerial::EBaud38400, CSerial::EData8, CSerial::EParNone, CSerial::EStop1);
//ハンドシェイクの設定
// EHandshakeUnknown = -1, // Unknown
// EHandshakeOff = 0, // No handshaking
// EHandshakeHardware = 1, // Hardware handshaking (RTS/CTS)
// EHandshakeSoftware = 2 // Software handshaking (XON/XOFF)
serial.SetupHandshaking(CSerial::EHandshakeOff);
//書き込み
//LONG CSerial::Write (const void* pData, size_t iLen, DWORD* pdwWritten, LPOVERLAPPED lpOverlapped, DWORD dwTimeout);
serial.Write(&send_buf[0], 16, &len_sent);
//読み出し
//LONG CSerial::Read (void* pData, size_t iLen, DWORD* pdwRead, LPOVERLAPPED lpOverlapped, DWORD dwTimeout)
serial.Read(&recv_buf[0], 1, &len_received);
//COMポートクローズ
serial.Close();