C# プラグイン方式で動的にDLLを読み込む

C#でプラグイン風の機能を使ってみたのでメモ。

基本的なポイントは次の通り。

  • 所定のディレクトリにあるプラグインを読み込む
  • プラグイン自体は.NET FrameworkのDLL
  • プラグインDLLは共通のインターフェイスをもつ

サンプルプロジェクトの構成

Visual Studio のソリューションにプロジェクトを4つ作成。

プロジェクト名 種類 参照設定 備考
HogeMain Windows フォームアプリケーション HogePlugin,Namihei,Fune スタートアッププロジェクト
HogePlugin クラスライブラリ プラグインのインターフェイス
Namihei クラスライブラリ HogePlugin プラグイン1
Fune クラスライブラリ HogePlugin プラグイン2

プラグインの共通仕様をDLLにして共有する(HogePlugin)。中身は普通のインターフェイス。

HogeMain でプラグイン(Hamihei,Fune)を参照設定しているのは、実行フォルダにプラグインDLLを作成する為だけの目的なので本来は必要ない。

HogeMain にテキストボックスを1つ追加すれば準備完了。
続きを読む


C# ウインドウメッセージによるプロセス間通信

C# プロセス間通信をしてみたのでメモ。

正道を行くならIPCチャンネルを使う選択が正しいのかもしれないが、面倒くさいしよく分からないので比較的簡単に実装できるウインドウメッセージを用いた方法にしてみた。

ただしこの方法には次の制限アリ。

  1. 同じ PC 上のプロセス間のみ
  2. GUI のあるアプリケーション

ウインドウ宛てにメッセージ送るわけなので当然といえば当然。

やりかたそのものは検索すれば出てくる方法とほぼ同じ。
取り回しが良いように DLL にしてみた。

サンプルプロジェクトの構成

まず Visual Studio のソリューションにプロジェクトを3つ作成。

プロジェクト名 種類 参照設定 備考
Server Windows フォームアプリケーション HogeHoge
Client Windows フォームアプリケーション HogeHoge,Server スタートアッププロジェクト
HogeHoge クラスライブラリ System.Windows.Forms

送受信まわりを簡単な DLL(HogeHoge) にして Server・Client から参照する。

Client で Server を参照設定しているのは、実行フォルダに Server.exe を作成する為だけの目的なので本来は必要ない。HogeHoge の System.Windows.Forms 参照はウインドウメッセージを扱うので必要。

Server にはテキストボックスを1つ、Client にはボタンを2つ追加すれば準備完了。
続きを読む



C# で JSON を処理する

久しぶりに C# で JSON を処理してみたので備忘録。

JSONを処理する(現在)

ググってみたところ、使い勝手の言いパーサーがあってすこぶる楽ちんになっていた。

DynamicJson

Dynamic 型を利用しているので、C# 4.0 (Visual Studio でいうと 2010 以降かな?)が必要。

使い方も簡単。

まず上記ページからファイルをダウンロード。(今日現在の最新版 DynamicJson_1.2.0.0.zip)

解凍して中にある DynamicJson.dll を参照設定に追加するか、DynamicJson.cs を自分のプロジェクトに追加すれば使えるようになる。

今回は外部ファイルを必要としなくてもいいように DynamicJson.cs を使ってみた。
(実行時に怒られるので System.Runtime.Serialization も参照設定に追加しておきましょう。)

そしてサンプルコード。
続きを読む


web cron サービスの代替えとして AppFog を使ってみる (Ruby編)

前回より cron っぽくするべく、今度は Ruby でやってみる。

基本的には公式のドキュメントに解説があるのだけど、

Task-scheduling

私のような Ruby 素人にはよくワカランし忘れそうなので備忘録。

実行コード

今回も「5分おきに特定のURLにアクセス」にチャレンジ。

実行スクリプト名 [app.rb]

require 'rubygems'
require 'rufus/scheduler'
require 'net/http'

scheduler = Rufus::Scheduler.new

scheduler.every '5m' do
	Net::HTTP.get('HOGE.com', '/hoge.php')
end

scheduler.join

Ruby の入門サイトあたりを見ればなんとなく理解できる。
続きを読む


スポンサーリンク