📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

159行目: 159行目:
<br>
<br>
===== D-Busヘルパーファイル =====
===== D-Busヘルパーファイル =====
<u>まず、上記のDBusインターフェース定義ファイルからC++コードを生成する。</u><br>
<u>まず、D-Busヘルパー実行ファイルを作成する。</u><br>
<syntaxhighlight lang="c++">
// 例: mochiu_helper.hファイル
#ifndef MOCHIU_HELPER_H
#define MOCHIU_HELPER_H
#include <sdbus-c++/sdbus-c++.h>
#include <iostream>
#include <cstring>
#include <memory>
#include "mochiu_adaptor.h"  // 生成されたプロキシヘッダをインクルード
 
class MochiuHelper : public MochiuAdaptor
{
public:
    MochiuHelper(sdbus::IConnection &connection, const std::string &objectPath) : MochiuAdaptor(connection, objectPath)
    {}
    // func1メソッドの実装
    int func1(const int &arg1, const std::string &arg2) override
    {
      std::cout << "func1 called with arg1: " << arg1 << " and arg2: " << arg2 << std::endl;
      return arg1 * 2;
    }
};
class MochiuService
{
private:
    std::unique_ptr<sdbus::IConnection> m_connection;
    std::unique_ptr<MochiuHelper> m_helper;
public:
    MochiuService() : m_connection(sdbus::createSessionBusConnection("org.example.mochiu")),
                      m_helper(std::make_unique<MochiuHelper>(*m_connection, "/org/example/mochiu"))
    {
        m_connection->enterEventLoop();
    }
};
#endif // MOCHIU_HELPER_H
</syntaxhighlight>
<br>
<u>次に、上記のDBusインターフェース定義ファイルからC++コードを生成する。</u><br>
sdbus-c++ライブラリには、XMLファイルからC++のソースコードを生成するツールが付属している。 (sdbus-c++-xml2cppファイル)<br>
sdbus-c++ライブラリには、XMLファイルからC++のソースコードを生成するツールが付属している。 (sdbus-c++-xml2cppファイル)<br>
sdbus-c++-xml2cppで生成されたソースコードを使用することにより、型安全性が向上して、D-Busインターフェースの使用がより簡単になる。<br>
sdbus-c++-xml2cppで生成されたソースコードを使用することにより、型安全性が向上して、D-Busインターフェースの使用がより簡単になる。<br>
165行目: 209行目:
以下に示すコマンドを実行して、<クライアント側のソースコード>と<サーバ側のソースコード) を生成する。<br>
以下に示すコマンドを実行して、<クライアント側のソースコード>と<サーバ側のソースコード) を生成する。<br>
  sdbus-c++-xml2cpp <D-Busインターフェース定義ファイル名 (XMLファイル)> \
  sdbus-c++-xml2cpp <D-Busインターフェース定義ファイル名 (XMLファイル)> \
                   --proxy=<D-Busインターフェース定義ファイルが記述されたクライアント側のソースコードファイル名 (プロキシヘッダ)> \
                   --proxy=<D-Busインターフェースメソッドが記述されたヘルパー実行ファイル側のヘッダファイル名 (プロキシヘッダ)> \
                   --adaptor=<D-Busインターフェース定義ファイルが記述されたサーバ側のソースコードファイル名>
                   --adaptor=<生成するアダプターヘッダファイル名>
   
   
  # 例 :
  # 例 :
  sdbus-c++-xml2cpp org.example.mochiu.xml \
  sdbus-c++-xml2cpp org.example.mochiu.xml \
                   --proxy=mochiu_proxy.h \
                   --proxy=mochiu_helper.h \
                   --adaptor=mochiu_adaptor.h
                   --adaptor=mochiu_adaptor.h
<br>
<br>
<u>次に、生成されたソースコードをプロジェクトに統合する。</u>
<u>最後に、生成されたソースコードを上記のヘルパー実行ファイルのソースコードに統合する。</u>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  #include <sdbus-c++/sdbus-c++.h>
  // 例: mochiu_header.hファイル
#include <iostream>
#include <cstring>
#include "mochiu_proxy.h"  // 生成されたプロキシヘッダをインクルード
   
   
#include "mochiu_adaptor.h"  // 生成されたプロキシヘッダをインクルード
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
===== D-Busの呼び出し側 =====
===== D-Busの呼び出し側 =====
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">