[2448] Re^3: プラグインとしての作り方

投稿日 2019/06/14(Fri) 00:02:27
投稿者
参照先 https://riku22.net

 こんばんは。

 お役に立てたようでよかったです。

> 〉C#やVBで作成する方法
> そちらも宜しければ教えていただけますでしょうか。
> また、C#はコマンドラインコンパイラしか使った事が有りませんが、
> それでも作成可能でしょうか。

 はい、Windows付属のコンパイラでも大体のものは作成可能です。
 というか、私もいつもこれでプラグインをいろいろ作っています。

 ということで、作ってみました。

 C#でプラグインを作る場合、呼び出し側で種類をわざわざ作成しなくても呼び出せるのがメリットだと思っています。(もしかしたら、.rdrファイルからプラグインを作る場合でも実装できるのかもしれませんが、よくわかりませんでした。)
 それから、C#でプラグインを作成した場合、作成したDLLのサイズが小さいのもメリットです。

 さて、実際のソースです。
 まずは、プラグインのもととなるC#のソースコードです。
 わかりやすいようにコメントを入れているので、かなり長くなっていますが、やってることはそんなに難しくない、と思います。

----------
/*
下記はおまじないだと思っておいてください。
// 特に、「using Produire」がないと、プロデルのプラグインとして動作させることができないので、プラグインを作る場合は、C#コードの先頭に必ず記述してください。
*/
using System;
using Produire;

// 名前空間の指定
namespace URLパーサ{
/*
クラスを作成
クラス名は、「【自分】で」や「【自分】から」などの「自分」の部分に入りますので、わかりやすい名前を付けるとよいでしょう。
プロデルのプラグインとして利用する場合は、クラス名のあとに「 : IProduireStaticClass」もしくは「 : IProduireClass」の記述が必要です。
「IProduireClass」を指定してクラスを作成した場合は、呼び出し側で「作る」命令で種類を作成する必要があります。
「IProduireStaticClass」を指定した場合は、「作る」命令を利用する必要はありません。
*/
public class URLパーサ : IProduireStaticClass{
/*
この手順を呼び出すときの呼び出し方法を指定
今回は、「URLパーサで」で呼び出したいので、「[自分("で")]」を指定します。
*/
[自分("で")]
/*
実際の手順を記述
手順名(ここでは、「読み取る」)は、わかりやすいものでかまいません。
手順の作成方法は、
public 戻り値の型 手順名(引数){
のような感じで、基本的にはC#の関数の作成と同じです。
ただ、プロデルのプラグインを指定する場合、引数の前に、「[を]」や「[から]」のように助詞を指定することができますが、例外として、「[の]」は指定できないので、注意が必要です(自分も「の」を指定してよくはまるので結構重要だったりします)。
*/
public int 読み取る([から]string ページ){
// 文字列を配列に分割
string[] data = ページ.Split('/');
/*
配列内の文字列で、戻り値を返却
なお、手順作成の際、戻り値に指定した型と違う型で戻り値を返そうとした場合、コンパイラでエラー扱いとなり、コンパイルできないので、注意してください(例えば、戻り値の型を「int」と指定しているのに、「string」を返そうとした際など)
*/
if (data[3] == "chart"){
return 1;
}else if (data[3] == "schedule"){
return 2;
}else{
return 0;
}
}
}
}
----------

 続いてこれをコンパイルする必要がありますが、私はいつも楽なようにバッチファイルを作ってコンパイルさせています。
 いちいちコマンドを打つと長くなってしまうので。
 とりあえず、バッチファイルを張っておきます。
 なお、さっきのプログラムを「urlparse.cs」として保存したうえで、「urlparse.dll」というファイル名で作成するものとします。

----------
@echo off
set cscPath=C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
if not exist %cscPath% (
echo C#コンパイラが見つかりません。このバッチファイルを開いて、「set cscPath=」のあとのパスをC#コンパイラのパスに書き換えてください。
goto end
)
set input=^
urlparse.cs
set output=urlparse.dll
set type=library
set produirePath="%programfiles(x86)%\produire"
set produireDLL=utopiat.Host.dll
set targetCPU=x86
set runcmd=%cscPath% /optimize /nologo ^
/platform:%targetCPU% ^
/target:%type% ^
/lib:%produirePath% ^
/reference:%produireDLL% ^
/out:%output% ^
%input%
echo running "%runcmd%"
%runcmd% > error.txt
for %%i in (error.txt) do set size=%%~zi
if %size%==0 del error.txt
echo finished
goto end

:end
pause
----------

 上記のバッチファイルを保存して実行すると、めでたく「urlparse.dll」というファイルが出来上がると思います。

 さて、今度はプロデルから呼び出す方法です。
 下記がソースとなります。

----------
「urlparse.dll」を利用する

ページは、「https://xxx.ne.jp/schedule/30.html
結果は、URLパーサでページから読み取ったもの
結果を表示する
----------

 以上、かなり長くなってしまいましたが、参考になれば幸いです。

 それでは。


関連一覧ツリー

をクリックするとツリーを一括表示します)

返信フォーム

(この投稿に返信する場合は下記フォームから投稿して下さい)
(1MBまで)
(英数字で8文字以内)

- 投稿修正/削除フォーム -
処理 No パスワード

▲ページの先頭へ

- WebForum -