以下の設定で新しいプロジェクトを作ります。
プロジェクトテンプレート: クラスライブラリ (.NET Framework)
ターゲットフレームワーク: .NET Framework 4.8
プロジェクトのプロパティを変更します。
インターフェイスを追加します。
ファイル名: IHelloWorld.cs
using System;using System.ComponentModel;using System.Runtime.InteropServices;namespace HelloWorldCs{ [Guid("★GUIDを入力★")] [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface IHelloWorld { [Description("ハロー")] string SayHello(); }}
インターフェイスを実装するクラスを追加します。
ファイル名: HelloWorld.cs
using System;using System.Runtime.InteropServices;namespace HelloWorldCs{ [Guid("★GUIDを入力(インターフェイスとは別のGUID)★")] [ComVisible(true)] [ClassInterface(ClassInterfaceType.None)] [ComDefaultInterface(typeof(IHelloWorld))] public class HelloWorld : IHelloWorld { string IHelloWorld.SayHello() { return "Hello World!"; } }}
プログラムをビルドして、COM コンポーネントは完成です。
COM コンポーネントの配布
作成した COM コンポーネントは登録しないと使えません。
COM を作成した PC で使うとき
何もせずに使うことができます。
Visual Studio が登録まで自動で行ってくれるからです。
別の PC で使うとき
配布した PC で自分で登録してから使う必要があります。
登録(または解除)には RegAsm.exe を使います。
「RegAsm.exe で .NET で自作したライブラリを登録/解除する」を参考にしてください。
CreateObject(名前空間.クラス名) とすることでオブジェクトを作れます。
今回は名前空間が HelloWorldCs 、クラス名が HelloWorld なので、“HelloWorldCs.HelloWorld” を引数として渡します。
With CreateObject("HelloWorldCs.HelloWorld") WScript.Echo .SayHelloEnd With
スクリプトを実行して「Hello World!」が表示されたら成功です。
実行時エラーが起きた場合
このエラーは、COM コンポーネントが対応するプラットフォームの違いによるものかもしれません。
Visual Studio のメニューバー → ビルド → 構成マネージャーとクリックします。
構成マネージャーのプラットフォームを確認します。
32bit 用のプログラム(cscript.exe)は、通常であれば C:\Windows\SysWOW64\cscript.exe にあるはずです。
私の場合はこれが原因でした。
64bit 用の cscript.exe から 32bit の COM を呼び出そうとして、エラーになっていたわけです。