Heimdallrのチャンネル拡張プラグインの1つであるキーワードチャンネルのソースコードをリリースします。
キーワードチャンネル 0.03 ソースコード(Visual C++.NET 2003用) ダウンロード
このソースコードは、著作権は放棄しませんがご自由にお使い下さい。もしソースコードのライセンスを明確にしたいという方がおりましたらご相談下さい。そのときに考えます。
Heimdallrとチャンネル拡張プラグインの間のインターフェースは、ChannelExtensionPluginAPIという名前が一応ついています。仕様の一部は以下のページで公開されています。
「ChannelExtensionPluginAPI仕様」
このページはWikiにより誰でも編集できるようになっています。
私が更新するペースはとても遅いと思いますので、
適当にソースコードを解析してさくさく書き足していって下さい。
キーワードチャンネルのソースコードは、Heimdallr本体よりもずっとビルドが容易になっています。
但しboostライブラリは必須です。
boostライブラリのヘッダファイルがあるフォルダをインクルードファイルのパスに含めてからビルドして下さい。
なお、変な場所にDLLファイルを出力するのでちょっと気を配っておいて下さい。
また、Visual C++.NETのStandard Editionを使う場合は、MFCの静的リンクができなかったと思うのでそこら辺も変更する必要があるかもしれません。
以下はどうでもよい話です。
一応キーワードチャンネルにバージョン番号が付いています。0.03です。
このバージョン番号はかなり適当につけました。
Heimdallr 1.08(安定版)をリリースするときまでに作りこんだので1.00を名乗っても良いんですよね。でももう1.08をリリースしちゃったので今更変えるのも面倒なのでとりあえずはこのままということで。
GooBlogのコメントをGetするプラグイン(要Perl環境)
http://heimdallr.info/wiki.cgi?action=ATTACH&page=ChannelExtensionPluginAPI%BB%C5%CD%CD&file=GooBlog%2Elzh
そのソースコード
http://heimdallr.info/wiki.cgi?action=ATTACH&page=ChannelExtensionPluginAPI%BB%C5%CD%CD&file=HeimDLL%5FSrc%2Elzh
Delphiでこれからプラグインを作ろうと想う人にはちょっぴり参考になるかも?
Delphi6Personalは無料なので良い感じです。
> ntdll.dllのメモリ管理周りの問題?っぽいのを回避できたのですが如何でしょうか?
落ちることはなくなりましたが、PluginGetInfoがFALSE(数値としては0)を返しているように見えます。
VC++のDebugモード、Releaseモード、ともにそうなります。
しかし、別のPCで(VC++を使わずに)試してみるとTRUEを返しているようです。
環境によってTRUEを返したりFALSEを返したりと不思議な挙動を見せています。謎ですね。
> plugin作るのって難しいですね~
今のところの難しさは、CとDelphiの違いに起因しているところがほとんどですねー。
本当に難しいのはこれからです。たぶん。^^;
でも1つ作ってしまえば2つ目以降は楽ですよ。
http://heimdallr.info/wiki.cgi?action=ATTACH&page=ChannelExtensionPluginAPI%BB%C5%CD%CD&file=test+%281%29%2Elzh
ntdll.dllのメモリ管理周りの問題?っぽいのを回避できたのですが如何でしょうか?
これでもPluginGetInfoで落ちますでしょうか?
これで大丈夫そうならPluginStoreChannelInfoとPluginLoadChannelInfo以外の部分は本実装固めてみようと思います。
plugin作るのって難しいですね~
HeimdallrをDebugモードで実行すると、最初のPluginGetInfoで落ちます。
Releaseモードで実行すると、PluginGetInfoは問題ありません。
ううむ良く分からない動作をしますね。
とりあえずReleaseモードで見ていますが、
PluginGetInfoが呼び出されるところまでたどり着けない状況です。
PluginCreateChannelが呼び出されるところは見てダイアログが表示されることは確認したのですが、どうもこの関数がfalseを返すようです。何か操作が足りないのでしょうか?
推測ですが、PluginGetInfo関数の型が仕様と異なるのではないかと思います。
ここらへんがおかしいと動作が不安定になり、落ちたり落ちなかったりするようになる恐れがあります。
PluginGetChannelにも問題があるのかもしれませんが、
Debugモードで実行すると、最初のPluginGetInfoで落ちるというのはおかしいので、とりあえずこれから解決していった方が良いのではないかと思います。
http://heimdallr.info/wiki.cgi?action=ATTACH&page=ChannelExtensionPluginAPI%BB%C5%CD%CD&file=test%2Elzh
PluginGetChannelでHeimdallrが強制終了してしまうです(泣
原因を教えていただけると助かります。
やっていることは
plugin/test/gettest.xmlの内容をpstrOutputに吐き出しているつもりです。
そういえば、プラグインフォルダの下には勝手にディレクトリばこばこ掘っちゃっても問題は無いのでしょうか?
設定とかいろいろ保存するための場所をプラグインに与えてやりたいのですが…
> PluginGetInfoのIDの末尾がchannelで終わらないとダメなのは仕様ですか?
なんでも良いはずです。URL形式でなくても良いです。
> それ以降の関数についても仕様に追加されるのをお待ちしています。
ぼちぼちと追加していきます。
とりあえず
http://heimdallr.info/wiki.cgi?action=ATTACH&page=ChannelExtensionPluginAPI%BB%C5%CD%CD&file=test%2Edll
PluginCreateChannelで画面出すところまでは作れましたので、それ以降の関数についても仕様に追加されるのをお待ちしています。
> あとHeimdallr1.8なのにApp Verが1.7.0.0でした。
バグ報告ありがとうございます。
次のバージョンで直しておきます。
> Heimdallrプラグインのデバッグ&テスト用のアプリとか用意されてませんでしょうか?
無いのです。作ろうかとも思いましたが、Heimdallr直接使った方が楽そうだったのでそうしてしまいました。
DelphiとC(というかWin32 SDK)の型の違いから発生したエラーっぽいですね>アプリケーションエラー
私もCの型がどのようにDelphiにマッピングされるのか分からないのでなんとも・・・
アプリケーションエラーに苦しめられてます~。
Heimdallrプラグインのデバッグ&テスト用のアプリとか用意されてませんでしょうか?
API単位で動作確認したいですし、ソース見てもC++いまいちわかりませんので動作で見たいです~
__stdcall使わなかったためのエラーでした
Delphiで作っているのであまりソースから丸コピーできないのがつらい~
完成したらDelphiでの作り方の特集ページを書きます。
作成したプラグインをプラグインフォルダに置いたところoffset: 7268eでエラー発生しました。
あとHeimdallr1.8なのにApp Verが1.7.0.0でした。