LoginSignup
13
9

More than 5 years have passed since last update.

[メモ] Windows: VC++ シリアル通信のライブラリを使う(Serial library for C++)

Last updated at Posted at 2016-07-08

概要

  • Serial library for C++を使って、シリアルポート通信
  • ライブラリは LGPL、サンプルプログラムはGPL
  • Serial.libは Static Libで生成される => DLLにすれば、自分のプログラムは、バイナリ配布可能(だよね??)。(自分のきたないコードを世に出さなくてもよい!?)

環境

手順

DLL生成

  1. ダウンロード(Serial_demo.zip)、解凍(Serialフォルダ)
  2. Serial/Serial.sln をダブルクリック。=> VC起動
  3. プロジェクトファイルのアップグレード=>[OK] VC-Serial01.png
  4. なんか聞かれるから、チェックをはずして、[OK] VC-Serial02.png
  5. 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:
    ...
    
  6. Solutionエクスプローラから、Serialで右クリ=>プロパティ

  7. Static library(.lib) から Dynamic Library(.dll)に変更
    VC-Serial03.png

  8. C/C++ > プリプロセッサで、DLLEXPORT_SERIALを定義
    VC-Serial04.png

  9. Solutionエクスプローラから、Serialで右クリ=>ビルド

    こんな感じ
    $ tree ./_Output/
    ./_Output/
    └── Release
        ├── Serial.dll
        ├── Serial.exp
        ├── Serial.iobj
        ├── Serial.ipdb
        ├── Serial.lib
        └── Serial.pdb
    
    1 directory, 6 files
    

HelloWoldから使ってみる

  1. Solutionエクスプローラから HelloWold以外を削除
  2. プロパティをひらいて、Include(C:\VS2015\Serial\Serial)とLibrary(C:\VS2015\Serial_Output\Release)のパスを追加 VC-Serial05.png
  3. リンカーの入力に、Serial.libを追加 VC-Serial06.png
  4. ビルド、実行 (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();

13
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
9