ページ「GNOMEのインストール」と「C♯のモジュールからC++のDLLを呼び出してみる」の間の差分

提供: とある社畜の頭脳整理
(ページ間の差分)
ナビゲーションに移動 検索に移動
 
 
1行目: 1行目:
= インストール =
+
久しぶりにやったら、すっかり忘れていたので覚書…
pacmanを使って普通にインストールしていきます。<br/>(最新かも忘れずに…)
 
<syntaxhighlight lang="bash">pacman -Syu
 
pacman -S gnome</syntaxhighlight>
 
  
= ネットワークマネージャーの起動 =
+
== C++のDLLプロジェクト作成 ==
「GNOME」ではネットワーク管理に「NetworkManager」を使用しています。<br/>
+
まず、C++のDLLを作成するときの注意点…
「GNOME」に合わせて?NetworkManagerがインストールされるので、起動と自動起動の設定をします。
+
作成するプロジェクトは、「Win32プロジェクト」を選択するんだ。<br/>
<syntaxhighlight lang="bash">systemctl start NetworkManager
+
[[ファイル:CShapeToCppDll-005.jpg]]
systemctl enable NetworkManager</syntaxhighlight>
 
  
= GDMの起動 =
 
今の状態で起動してもログイン画面が表示されません。<br/>
 
ログイン画面を表示するためには「gdm」を起動します。<br/>
 
以下のコマンドで、gdmの起動と自動起動の設定をします。
 
<syntaxhighlight lang="bash">systemctl start gdm
 
systemctl enable gdm</syntaxhighlight>
 
  
= 起動 =
+
あと…アプリケーションの設定では「DLL」と「空のプロジェクト」を選択してね。<br/>
コンソールで起動する場合は、以下のコマンドを実行します。<br/>
+
[[ファイル:CShapeToCppDll-001.jpg]]<br/>
(すでにログインしている状態なので、ログイン画面は表示されません)
 
<syntaxhighlight lang="bash">XDG_SESSION_TYPE=wayland dbus-run-session gnome-session</syntaxhighlight>
 
  
= 日本語化 =
 
起動できても、今のところすべてが英語で表示されています。<br/>
 
日本人なので、日本語に直しておきます。
 
  
== キーボードの変更 ==
+
空のプロジェクトが作成されたら「cpp」「h」「def」ファイルを追加するんだ。今回は「CppDll.cpp」「CppDll.h」「CppDll.def」を追加したよ。
英語キーボードを使用している人はそのままで良いのですが、106(または109)キーボードを使用している人は、切り替えます。
 
  
画面右上をクリックして、歯車アイコン(設定)をクリックします。<br/>
 
[[ファイル:archlinux-gnome-001.png | 400px]]
 
  
「Region & Language」をクリックして、「Input Sources」の「+」マークをクリックします。<br/>
+
そしたら、プロジェクトのプロパティを開いて「構成プロパティ→リンカー→入力→モジュール定義ファイル」に「CppDll.def」を設定するんだ。<br/>
[[ファイル:archlinux-gnome-010.png | 400px]]
+
(DebugとReleaseでそれぞれ設定する必要があるんだよ。)<br/>
 +
[[ファイル:CShapeToCppDll-002.jpg]]<br/>
  
(画面上は「japanese」が表示されていますが…表示されていないはずです)<br/>
+
== DLLのコード ==
縦向きの「…」をクリックします。<br/>
+
=== ヘッダーファイル(*.h) ===
[[ファイル:archlinux-gnome-011.png | 400px]]
+
<syntaxhighlight lang="cpp">
 +
#ifndef DLLAPI
 +
#define DLLAPI extern "C" __declspec(dllimport)
 +
#endif
  
ウインドウ下部の検索ボックスに「japanese」を入力してします。<br/>
+
DLLAPI long __stdcall _Sum(const long p_Number1, const long p_Number2);
「japanese」が表示されたら、それをクリクします。<br/>
+
</syntaxhighlight>
[[ファイル:archlinux-gnome-012.png | 400px]]
 
  
使用しているキーボードの種類に合わせて、選択します。<br/>
+
=== コードファイル(*.cpp) ===
キーボードの種類がわからない人は「[http://qa.elecom.co.jp/faq_detail.html?id=5262 キーボードの種類を知りたい/106、109キーボードとは?/英語、日本語キ...]」を見るとわかるかもしれません。<br/>
+
<syntaxhighlight lang="cpp">
選択したら「Add」ボタンをクリックします。<br/>
+
#define DLLAPI
[[ファイル:archlinux-gnome-013.png | 400px]]
 
  
優先順位を変更します。<br/>
+
#include "CppDll.h"
「japanese」をドラッグして、「English」の上にドロップします。<br/>
 
[[ファイル:archlinux-gnome-014.png | 400px]]
 
  
「✕」をクリックして閉じます。<br/>
+
DLLAPI long __stdcall _Sum(const long p_Number1, const long p_Number2)
[[ファイル:archlinux-gnome-015.png | 400px]]
+
{
 +
return p_Number1 + p_Number2;
 +
}
 +
</syntaxhighlight>
  
画面上部の「en▼」をクリックして、「japanese」を選択します。<br/>
+
=== モジュール定義ファイル(*.def) ===
[[ファイル:archlinux-gnome-016.png | 400px]]
+
<syntaxhighlight lang="text">
 +
LIBRARY CppDll
  
 +
EXPORTS
 +
_Sum
 +
</syntaxhighlight>
  
このやり方では、「English」を生かしていますが、使わないなら削除しても良いかと思います。<br/>
+
== C♯のプロジェクト作成 ==
ドラッグ・アンド・ドロップした所で、「English」右横の「✕」をクリックすると削除できます。<br/>
+
ほとんどそのまま作るんだけど…ソリューションのコンパイル対策をしておくよ。
(検証していないので保証はしかねますが…)
 
  
== ロケールの変更 ==
+
=== ビルドイベントの設定 ===
インストール時は「en_US.UTF-8」で設定しましたが、日本語に変更します<br/>
+
C++のDLLはソリューションフォルダ直下の「Debug」や「Release」フォルダにDLLが格納されてしまうんだ。そうすると、デバッグするときにDLLが見つからないので、ビルドイベントを使ってコピーしてしまうよ。以下のように設定してね。(「Release」コンパイルするまでは「Release」フォルダがないのでコメントアウトしているよ)<br/>
「/etc/locale.conf」ファイルの内容を以下の様に修正します。<br/>
+
[[ファイル:CShapeToCppDll-004.jpg]]<br/>
  
修正前
+
=== プロジェクトの依存関係の設定 ===
<syntaxhighlight lang="bash">LANG=en_US.UTF-8</syntaxhighlight>
+
コピーするにもちゃんとリコンパイルされた資源をコピーしないといけないので、プロジェクトの依存関係を設定することで、ビルドの順番を設定するよ。<Br/>
 +
ソリューションエクスプローラーからC♯のプロジェクトを右クリックして「ビルド依存関係」→「プロジェクト依存関係」を選択してね。<br/>
 +
「依存関係」タブの依存先にC++のプロジェクトが表示されているはずだから、チェックを入れてOKボタンをクリックしてね。
  
修正後
+
== C♯のコード ==
<syntaxhighlight lang="bash">#LANG=en_US.UTF-8
+
MVVMモデルでサンプルを作ったからビューモデルが入っているけど…DLLを呼ぶには必要ないから無視してね。
LANG=ja_JP.UTF-8</syntaxhighlight>
+
=== モデル ===
 +
<syntaxhighlight lang="C#">
 +
using System;
 +
using System.Collections.Generic;
 +
using System.Linq;
 +
using System.Text;
 +
using System.Threading.Tasks;
 +
using System.Windows;
 +
using System.Windows.Controls;
 +
using System.Windows.Data;
 +
using System.Windows.Documents;
 +
using System.Windows.Input;
 +
using System.Windows.Media;
 +
using System.Windows.Media.Imaging;
 +
using System.Windows.Navigation;
 +
using System.Windows.Shapes;
  
== 日本語フォントのインストール ==
+
//追加
文字コードが日本語になっても、フォントがインストールされていなければ表示できません。<br/>
+
using System.Runtime.InteropServices;
なので、日本語フォントをインストールします。<br/>
 
今回は、IPA提供の「otf-ipafont」をインストールします。
 
<syntaxhighlight lang="bash">pacman -S otf-ipafont</syntaxhighlight>
 
  
== GUIから設定変更 ==
+
namespace CSharpToCDLL
※ロケールの変更と、フォントのインストールを済ませてから、ログインすると勝手に変わる場合があるみたいです。
+
{
 +
    /// <summary>
 +
    /// MainWindow.xaml の相互作用ロジック
 +
    /// </summary>
 +
    public partial class MainWindow : Window
 +
    {
 +
        /// <summary>
 +
        /// DLLの関数定義
 +
        /// </summary>
 +
        /// <param name="p_Number1">数値1</param>
 +
        /// <param name="p_Number2">数値2</param>
 +
        /// <returns>合計</returns>
 +
        [DllImport("CppDll.dll")]
 +
        private extern static Int32 _Sum(Int32 p_Number1,Int32 p_Number2);
  
画面右上をクリックしてメニューを表示して、歯車アイコン(設定)をクリックします。<br/>
+
        /// <summary>
[[ファイル:archlinux-gnome-001.png | 400px]]
+
        /// 標準のコンストラクタ
 +
        /// </summary>
 +
        public MainWindow()
 +
        {
 +
            InitializeComponent();
 +
        }
  
左のリストから「Region & Language」をクリックして、「Formats」をクリックします。<br/>
+
        /// <summary>
[[ファイル:archlinux-gnome-002.png | 400px]]
+
        /// ボタンクリックイベントハンドラ
 +
        /// </summary>
 +
        /// <param name="sender">イベント送信元</param>
 +
        /// <param name="e">イベント情報</param>
 +
        private void Button_Click(object sender, RoutedEventArgs e)
 +
        {
 +
            //DLLの関数を呼び出す
 +
            Int32 l_Result = _Sum(300, 500);
  
一覧から「日本」にチェックを入れて、「Done」をクリックします。<br/>
+
            //計算結果の表示
[[ファイル:archlinux-gnome-003.png | 400px]]
+
            MessageBox.Show("計算結果:" + l_Result.ToString());
 +
        }
 +
    }
 +
}
 +
</syntaxhighlight>
  
「Restart」を無視して、「Language」をクリックします。<br/>
+
=== ビュー ===
[[ファイル:archlinux-gnome-004.png | 400px]]
+
<source lang="xml">
 +
<Window x:Class="CSharpToCDLL.MainWindow"
 +
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 +
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 +
        Title="MainWindow"
 +
        Height="77.056"
 +
        Width="525">
 +
    <Grid>
 +
        <Grid.RowDefinitions>
 +
            <RowDefinition Height="5"/>
 +
            <RowDefinition Height="24"/>
 +
            <RowDefinition/>
 +
            <RowDefinition Height="5"/>
 +
        </Grid.RowDefinitions>
 +
        <Grid.ColumnDefinitions>
 +
            <ColumnDefinition Width="5"/>
 +
            <ColumnDefinition/>
 +
            <ColumnDefinition Width="5"/>
 +
            <ColumnDefinition Width="75"/>
 +
            <ColumnDefinition Width="5"/>
 +
        </Grid.ColumnDefinitions>
 +
        <Label
 +
            Grid.Row="1"
 +
            Grid.Column="1"
 +
            Content="{Binding Label_Content}"/>
 +
        <Button
 +
            Grid.Row="1"
 +
            Grid.Column="3"
 +
            Content="実行"
 +
            Click="Button_Click"/>
 +
    </Grid>
 +
</Window>
 +
</source>
 +
=== ビューモデル ===
 +
<source lang="csharp">
 +
using System;
 +
using System.Collections.Generic;
 +
using System.Linq;
 +
using System.Text;
 +
using System.Threading.Tasks;
  
一覧から「日本語」を選択して、「Select」をクリックします。<br/>
+
//追加
[[ファイル:archlinux-gnome-005.png | 400px]]
+
using System.ComponentModel;
  
「Restart」をクリックします。<br/>
+
namespace CSharpToCDLL
[[ファイル:archlinux-gnome-006.png | 400px]]
+
{
 +
    class MainWindowViewModel : INotifyPropertyChanged
 +
    {
 +
        /// <summary>
 +
        /// ラベル表示用変数
 +
        /// </summary>
 +
        private String m_Label_Content;
  
ログアウトを促されるので、「Log Out」をクリックして、ログアウトします。<br/>
+
        /// <summary>
[[ファイル:archlinux-gnome-007.png | 400px]]
+
        /// ラベル表示文字列
 +
        /// </summary>
 +
        public String Label_Content
 +
        {
 +
            set
 +
            {
 +
                this.m_Label_Content = value;
 +
                this.OnPropertyChanged("Label_Content");
 +
            }
 +
            get { return this.m_Label_Content; }
 +
        }
  
 +
        /// <summary>
 +
        /// プロパティ変更イベントハンドラ
 +
        /// </summary>
 +
        public event PropertyChangedEventHandler PropertyChanged;
  
ログアウトしたら、ログイン画面からログインします。
+
        /// <summary>
 +
        /// プロパティ変更通知
 +
        /// </summary>
 +
        /// <param name="p_PropertyName">プロパティ名</param>
 +
        public void OnPropertyChanged(String p_PropertyName)
 +
        {
 +
            if (this.PropertyChanged != null)
 +
            {
 +
                this.PropertyChanged(this, new PropertyChangedEventArgs(p_PropertyName));
 +
            }
 +
        }
 +
    }
 +
}
 +
</source>
  
ここは人によるかと思いますが…。<br/>
+
[[Category:C♯]]
homeディレクトリ配下の色々なフォルダ名を日本語にするか聞いてきます。<br/>
+
[[Category:C++]]
必要に応じて「古い名前のままにする」「名前を変更する」のどちらかを選択します<br/>
+
[[Category:dll]]
[[ファイル:archlinux-gnome-008.png | 400px]]
 
 
 
以下の画像の通り、日本語になります。<br/>
 
[[ファイル:archlinux-gnome-009.png | 400px]]
 
 
 
== 日本語入力のインストールと設定 ==
 
画面上は日本語になりましたが、まだ日本語の入力が出来ません。<br/>
 
日本語入力できるようにしていきます。<br/>
 
今回は「linux版google日本語入力」を入れていきます
 
 
 
下記コマンドをターミナルで実行します。
 
<syntaxhighlight lang="bash">pacman -S fcitx-im fcitx-configtool fcitx-mozc</syntaxhighlight>
 
 
 
ずらずらぁ~っとインストールされます。
 
 
 
ここで、ArchLinuxのFcitxのサイトでは「[https://wiki.archlinux.jp/index.php/Fcitx 以下の行をデスクトップのスタートアップスクリプトファイル (GDM, LightDM, SDDM を使っている場合は .xprofile もしくは .profile、startx や Slim を使っている場合は .xinitrc、Wayland を使っている場合は /etc/environment) に追加してください。]」と書いてあるので、その通りやっても動かなかった…。
 
 
 
色々と調べたら「[https://blog.masudak.net/entry/2015/08/04/200000 ~/.profileが読み込まれなくて困ったら、ここを見る! - カイワレの大冒険 Third]」にたどり着いて…<br/>
 
ホームディレクトリのファイルを見ると…
 
* .profile…無い
 
* .xprofile…無い
 
* .bash_login…無い
 
* .bash_profile…これ!
 
 
 
つ~事で「.bash_profile」ファイルに以下を追記します。<br/>
 
<syntaxhighlight lang="bash">export GTK_IM_MODULE=fcitx
 
export QT_IM_MODULE=fcitx
 
export XMODIFIERS=@im=fcitx</syntaxhighlight>
 
 
 
GUIでログインしてテキストエディタで、「Ctrl+Space」または「全角/半角」「E/J」キーを押すと、日本語入力できるかと思います。
 
 
 
ちなみにsshなどで接続している場合は、クライアント側の[https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5#%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%85%A5%E5%8A%9B%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5 FEP](古いwww)で入力されるので問題ありません。
 
 
 
= 経験したトラブル =
 
== ネットワークのアイコンに「?」が出た ==
 
環境にもよるのですが…NetworkManagerは一定間隔で、接続確認をしているそうです。<ref name="NetworkIcon_Less" /><br/>
 
例えば、認証プロキシ配下で動作させると、当然認証前は接続確認できないわけで…<br/>
 
その結果ネットワークのアイコンに「?」が出るそうです。<br/>
 
という訳で、接続確認をしないようにします。
 
 
 
やり方は「/etc/NetworkManager/conf.d」ディレクトリに、任意のconfファイル(参考サイトだと「20-connectivity.conf 」)を以下の内容で作成します。
 
<syntaxhighlight lang="text">[connectivity]
 
uri=</syntaxhighlight>
 
(必要に応じてNetworkManagerを再起動)
 
 
 
これで、接続確認しなくなるようです。
 
 
 
== ネットワークの設定が沢山 ==
 
GUIでネットワークの設定が、NICのデバイス名の他、有線接続1など複数表示されてしまいました。<br/>
 
しかも、有効になっているのはNICのデバイス名の方…(Debianの経験から「有線接続1」が有効になってほしい…)<br/>
 
なんとなく心当たりが…<br/>
 
インストールの時に「dhcpcdサービス」を有効にしたのが原因ぽいです。<br/>
 
(GNOMEはNetworkManagerで管理してますから…)<br/>
 
 
 
そこで以下のコマンドで、dhcpcdサービスを無効化します。
 
<syntaxhighlight lang="bash">systemctl disable dhcpcd@[interface].service</syntaxhighlight>
 
[interface]をNICのデバイス名に置き換えてください。
 
 
 
これできれいになりました!!!
 
 
 
= 参考サイト =
 
[https://wiki.archlinux.jp/index.php/GNOME GNOME - ArchWiki]<br/>
 
[http://note.kurodigi.com/post-0-19/ Arch Linuxに日本語環境を構築する]<br/>
 
[http://qa.elecom.co.jp/faq_detail.html?id=5262 キーボードの種類を知りたい/106、109キーボードとは?/英語、日本語キ...]<br/>
 
[https://wiki.archlinux.jp/index.php/Fcitx Fcitx - ArchWiki]<br/>
 
[https://blog.masudak.net/entry/2015/08/04/200000 ~/.profileが読み込まれなくて困ったら、ここを見る! - カイワレの大冒険 Third]<br/>
 
 
 
= 脚注 =
 
<references>
 
<ref name="NetworkIcon_Less">[https://forum.manjaro.org/t/working-ethernet-connection-now-shows-question-mark-icon/43556 Working ethernet connection now shows question mark icon - Newbie Corner - Manjaro Linux Forum]</ref>
 
</references>
 
 
 
[[Category:ArchLinux]]
 
[[Category:GNOME]]
 

2019年7月26日 (金) 16:46時点における版

久しぶりにやったら、すっかり忘れていたので覚書…

C++のDLLプロジェクト作成

まず、C++のDLLを作成するときの注意点… 作成するプロジェクトは、「Win32プロジェクト」を選択するんだ。
CShapeToCppDll-005.jpg


あと…アプリケーションの設定では「DLL」と「空のプロジェクト」を選択してね。
CShapeToCppDll-001.jpg


空のプロジェクトが作成されたら「cpp」「h」「def」ファイルを追加するんだ。今回は「CppDll.cpp」「CppDll.h」「CppDll.def」を追加したよ。


そしたら、プロジェクトのプロパティを開いて「構成プロパティ→リンカー→入力→モジュール定義ファイル」に「CppDll.def」を設定するんだ。
(DebugとReleaseでそれぞれ設定する必要があるんだよ。)
CShapeToCppDll-002.jpg

DLLのコード

ヘッダーファイル(*.h)

#ifndef DLLAPI
#define DLLAPI extern "C" __declspec(dllimport)
#endif

DLLAPI long __stdcall _Sum(const long p_Number1, const long p_Number2);

コードファイル(*.cpp)

#define DLLAPI

#include "CppDll.h"

DLLAPI long __stdcall _Sum(const long p_Number1, const long p_Number2)
{
	return p_Number1 + p_Number2;
}

モジュール定義ファイル(*.def)

LIBRARY	CppDll

EXPORTS
	_Sum

C♯のプロジェクト作成

ほとんどそのまま作るんだけど…ソリューションのコンパイル対策をしておくよ。

ビルドイベントの設定

C++のDLLはソリューションフォルダ直下の「Debug」や「Release」フォルダにDLLが格納されてしまうんだ。そうすると、デバッグするときにDLLが見つからないので、ビルドイベントを使ってコピーしてしまうよ。以下のように設定してね。(「Release」コンパイルするまでは「Release」フォルダがないのでコメントアウトしているよ)
CShapeToCppDll-004.jpg

プロジェクトの依存関係の設定

コピーするにもちゃんとリコンパイルされた資源をコピーしないといけないので、プロジェクトの依存関係を設定することで、ビルドの順番を設定するよ。
ソリューションエクスプローラーからC♯のプロジェクトを右クリックして「ビルド依存関係」→「プロジェクト依存関係」を選択してね。
「依存関係」タブの依存先にC++のプロジェクトが表示されているはずだから、チェックを入れてOKボタンをクリックしてね。

C♯のコード

MVVMモデルでサンプルを作ったからビューモデルが入っているけど…DLLを呼ぶには必要ないから無視してね。

モデル

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

//追加
using System.Runtime.InteropServices;

namespace CSharpToCDLL
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        /// <summary>
        /// DLLの関数定義
        /// </summary>
        /// <param name="p_Number1">数値1</param>
        /// <param name="p_Number2">数値2</param>
        /// <returns>合計</returns>
        [DllImport("CppDll.dll")]
        private extern static Int32 _Sum(Int32 p_Number1,Int32 p_Number2);

        /// <summary>
        /// 標準のコンストラクタ
        /// </summary>
        public MainWindow()
        {
            InitializeComponent();
        }

        /// <summary>
        /// ボタンクリックイベントハンドラ
        /// </summary>
        /// <param name="sender">イベント送信元</param>
        /// <param name="e">イベント情報</param>
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //DLLの関数を呼び出す
            Int32 l_Result = _Sum(300, 500);

            //計算結果の表示
            MessageBox.Show("計算結果:" + l_Result.ToString());
        }
    }
}

ビュー

<Window x:Class="CSharpToCDLL.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Height="77.056"
        Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="5"/>
            <RowDefinition Height="24"/>
            <RowDefinition/>
            <RowDefinition Height="5"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="75"/>
            <ColumnDefinition Width="5"/>
        </Grid.ColumnDefinitions>
        <Label
            Grid.Row="1"
            Grid.Column="1"
            Content="{Binding Label_Content}"/>
        <Button
            Grid.Row="1"
            Grid.Column="3"
            Content="実行"
            Click="Button_Click"/>
    </Grid>
</Window>

ビューモデル

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//追加
using System.ComponentModel;

namespace CSharpToCDLL
{
    class MainWindowViewModel : INotifyPropertyChanged
    {
        /// <summary>
        /// ラベル表示用変数
        /// </summary>
        private String m_Label_Content;

        /// <summary>
        /// ラベル表示文字列
        /// </summary>
        public String Label_Content
        {
            set
            {
                this.m_Label_Content = value;
                this.OnPropertyChanged("Label_Content");
            }
            get { return this.m_Label_Content; }
        }

        /// <summary>
        /// プロパティ変更イベントハンドラ
        /// </summary>
        public event PropertyChangedEventHandler PropertyChanged;

        /// <summary>
        /// プロパティ変更通知
        /// </summary>
        /// <param name="p_PropertyName">プロパティ名</param>
        public void OnPropertyChanged(String p_PropertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(p_PropertyName));
            }
        }
    }
}