13
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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`で右クリ=>プロパティ
- `Static library(.lib)` から `Dynamic Library(.dll)`に変更
![VC-Serial03.png](https://qiita-image-store.s3.amazonaws.com/0/75594/e0fa6919-0463-21a3-82c5-3b5575063a33.png)

7. C/C++ > プリプロセッサで、`DLLEXPORT_SERIAL`を定義
![VC-Serial04.png](https://qiita-image-store.s3.amazonaws.com/0/75594/a0ad2460-4719-b9a2-5bfd-e6bd9de2d36e.png)

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

    ```shell-session:こんな感じ
    $ 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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?