ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

リフレクションを使ってCOMオブジェクトを呼び出す

プログラミングC# p601

タイプライブラリファイルがない場合は、この方法を使うのだとか。
ちょっとCOM自体VBScriptで使う範囲しか分かってないので、その意味するところも良く分からないですが。。
試しに、VBScriptで良く使う、Scripting.FileSystemObjectをC#から呼び出してみました。
もちろん、.NET Framework自体にもファイルを扱うライブラリはあるので、あまり意味のあるサンプルとはいえません。。

using System;
using System.Reflection;

class CallComTest
{
        static void Main(string[] args)
        {
                // Scripting.FileSystemObjectの型(Type)を取得
                Type t = Type.GetTypeFromProgID("Scripting.FileSystemObject");

                // Scripting.FileSystemObjectのインスタンスを作成
                object fs = Activator.CreateInstance(t);

                // Scripting.FileSystemObject#FolderExistsを呼んでみる
                string[] arguments = {"C:\\"};
                string[] arguments_fail = {"C:\\aabc"};
                object result = t.InvokeMember("FolderExists", BindingFlags.Invo
keMethod, null, fs, arguments);
                object result_fail = t.InvokeMember("FolderExists", BindingFlags
.InvokeMethod, null, fs, arguments_fail);

                Console.WriteLine(result);
                Console.WriteLine(result_fail);
        }
}

結果はこう。

True
False

ちゃんと呼べてるらしい。
ちなみにVBScriptで同じことをやるとこうなる。

Set fs = CreateObject("Scripting.FileSystemObject")

result = fs.FolderExists("C:\\")
result_fail = fs.FolderExists("C:\\aabc")

WScript.Echo result
WScript.Echo result_fail

結果はこう。

 -1
0

おっと、TrueとかFalseって表示されないのね。
なんだかC言語っぽいなぁ。