リフレクションを使って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言語っぽいなぁ。