[C#]Type.GetTypeFromProgID

64ビットの環境では、GetTypeFromProgIDで得たタイプはSystem.__ComObjectにラップされているらしく何も情報が取得できないので、PowerShellのGet-Memberを借りてプロパティやメソッドの情報を得るしかない様に思えたが・・・

プロジェクトにADODBの参照を追加した時点で、

ADODB.Connection cn = null;

と書けるようになるのだから、”ADODB.xxxx”の大半の名前の問題が解消されているハズ。

実際に上をコードすると、

Type.GetTypeFromProgIDの結果はそのままだけど、

Type?t = Type.GetType("ADODB.Connection");

で、それっぽいタイプが得られる。

ADODB.Fieldは、Type.GetTypeFromProgIDでTypeを得られないので、ソースに変数を宣言しないと全く取得できなかった。

public static ADODB.Field? field = null;

これで、プロパティとかメソッドが見つかると思い、FindMembersを使っても大空振り。

ADODB.Connectionのツールチップにはinterface ADODB.Connection。

更にツールチップの逆アセンブル?リンクから

ADODB._Connectionが大元のインタフェースらしい

しかし、FindMembersを使っても ConnectionString くらいしか情報が得られない。

一方、FindInterfacesは、ADODB._Connection、ADODB.Connection15、ADODB._ADO、ADODB.ConnectionEvents_Eventを見つけてくるので、

FindMembersとFindInterfacesを組み合わせて、タイプを検索するC#コードを拡張していく様にすると、良い事があるかもしれない。

何度も何度も何度も・・・ビルドし直すのは面倒なんでやらないけど


  • タグ:


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA