読者です 読者をやめる 読者になる 読者になる

チリペヂィア

リンクフリー。サンプルコードなどは関連記事内でライセンスについて明示されない限り商用利用なども自由に行って構いませんが、自己責任でお願いします。またこれら日記内容の著作権自体は放棄していません。引用部分については引用元の権利に従ってください。

週間メタセコプラグインを作る(mqsdx300.0.0)

嘘、言ってみたかっただけです。週間とかムリ。

C++で.Net(C++/CLI)なメタセコプラグイン開発用の支援ライブラリを作ってみました。その名はmqsdx(*1)。リンクはコチラ。

ほとんどStasionPluginまたはCommandPlugin開発専用になっちゃってますが、他にもオブジェクトとマテリアル検索が充実しています。「VC2010(Express含む)でダイアログベースのメタセコプラグインがもうちょっとサクサク作れると良いなー」とやってみた次第です。

#include "mqsdx/MQCLI.hpp"

public ref class CustomPlugin : MQCLI::CommandPlugin {
public:
	CustomPlugin() : CommandPlugin( "tiritomato", "Sample Copyright(C) 2013, tiritomato.", "SampleButton" ) {}
	virtual BOOL Activate(MQDocument doc, BOOL flag) override {
		if ( flag == TRUE ) ::MessageBox( MQ_GetWindowHandle(), "Activate!", NULL, 0 );
		return flag;
	}
};

static bool initialResult = MQCLI::Initialize( gcnew CustomPlugin() ); // Initialize!

↑これコンパイルするだけで、いわゆるMQSDK相当のプラグインの基礎は出来ちゃうのぜ。しかもCLI、つまり.Netライブラリも使えるという寸法で。

しかしそもそも.Netとか言えば聞こえは良かったんですが、実のところ

  • CLIクラスはC++クラスを直接継承する事が出来ない
  • CLIマネージドなインスタンスはDllMainから初期化できない

とまぁ実に通好みな苦々しい問題が山積みという事が判明し、MQSDK相当のままCLI移行するべくコードをこねくりまわしているうちにライブラリになっちゃったぁーというのが実情です。

なお開発を始めたタイミングで3.0系しか使えなかったためにmqsdk300を想定しています。

もちろん現行SDKでもコンパイルできます。しかし、だいたい動いちゃいますが、もとから頼りない事前テストが、より確実に信用ならないゾーンになります(で、少なくとも現在311用に追加されている部分はちゃんと動くまで対応したいので、もう少しだけアップデートを続ける予定です)。

しかしプライベート名前空間、使 っ ち ゃ っ て る じ ゃ ね ぇ の www

どこ見てるんですかアナタ!実質VC2010専用なので…許して、許してください。

もしメタセコプラグイン開発をしていらっしゃる方で、なにかコメントがあればぜひぜひ。

そう言えば「本家サイトのBBSに何か書いたほうが良いのだろうか」と悩んで結局コッソリ公開することにしました。

なにしろ「今更C/C++からC++/CLIに乗り換えるプラグイン開発者がどの程度居るかしら?きっとみんな常套TIPS持っているに違いない」「何かにつけて.Netアプリの処理が重いのはバッチリ体感できるレベル(とくに起動)」…まあなにかこだわりがあるわけでもなく「メタセコのアフターマーケットはだいたいブログとかそれくらいでやるもん」みたいな空気を感じたのでそれにならってるだけです。

しめしめしばらくダイアログアプリ作るネタで記事数増やせます。

*1:文字数を減らしたくてMQxにしようと思ってたのに、検索かけたらダダカブりだったので泣く泣く5文字にしました