D言語とCOMのちょっと危ない関係…

アバター
tk-xleader
記事: 158
登録日時: 14年前
連絡を取る:

D言語とCOMのちょっと危ない関係…

投稿記事 by tk-xleader » 13年前

最近はプログラミングのほとんどがD言語 - Wikipedia で書いてるのです。で、C#でGUIは書きたい(.NETでGUIって本当に楽だもん…)ので、C++/CLI経由で扱えるようにCOMにしてやろうと目論んでるのですが…

Phobos(D言語の標準ライブラリ)に一応Windows API用のバインディングがあるのはあるのですが、COMインターフェイスがなんと、IUnknownとIClassFactoryの二つしか定義がない。要は、そのほかは自作しろという話になります。一応、「WindowsApi Bindings」というのはあるのですけどね…

一応、IPersist インターフェイスとIPersistFile インターフェイスの定義が必要だったので、ちょこっと書いてみました。

CODE:

/**
 * Microsoft.COM.IPersist interface
 * GUID: {0000010c-0000-0000-C000-000000000046}
 */
extern(Windows)
interface IPersist : IUnknown{
	public extern(Windows) HRESULT GetClassID(out GUID classid);
}

/**
 * Microsoft.COM.IPersistFile interface
 * GUID: {0000010b-0000-0000-C000-000000000046}
 */
extern(Windows)
interface IPersistFile : IPersist{
	public extern(Windows):
	HRESULT GetCurFile(out LPOLESTR pszFileName);
	HRESULT IsDirty();
	HRESULT Load(LPCOLESTR pszFileName,DWORD dwMode);
	HRESULT Save(LPCOLESTR pszFileName,BOOL bRemember);
	HRESULT SaveCompleted(LPCOLESTR pszFileName);
}
というか、Phobosでは何故かCLSIDがconst(GUID)のエイリアスとして定義されているので、IPersist.GetClassID メソッドの引数をGUIDへのoutパラメータにしなければならないというところがありますけど、まぁこんなものでいいはずです。

コメントはまだありません。