.NET コンポーネントを COM+ で使う
1. はじめに
.NET Framework では COM+ コンポーネントとして動作可能なコンポーネントを作成する仕組みも用意されています。ここでは C# を用いて COM+ コンポーネントを作成する方法を紹介しています。
2. 環境
この演習を行うためには、以下をインストールしておく必要があります。
- Visual Studio .NET
コマンドは、Visual Studio .NET Command Prompt から実行してください。
3. 演習の流れ
- インターフェイスを公開するよう属性を設定する
- 厳密名を付ける
- アセンブリをライブラリとして作成する
- RegAsm で .NET コンポーネントを COM+ コンポーネントとして登録
- GAC にコンポーネントを登録する
4. コンポーネントの作成
4.1 インターフェイスを公開するよう属性を設定する
C# を使ってコードを書きます。以下のコードを mymath.cs として保存します。
using System;
using System.Reflection;
using System.EnterpriseServices;
using System.Runtime.InteropServices;
[assembly:AssemblyKeyFile("mykey.snk")]
namespace MyTest {
[ClassInterface(ClassInterfaceType.AutoDual)]
public class MyMath :
ServicedComponent {
public
Int32 Add (Int32
i, Int32
j) {
return i+j;
}
}
}
ここで、class の属性として ClassInterface が指定されていることに注意してください。これにより、このクラスがクラスインターフェイスとして公開されます。
また、クラスが ServicedComponent を継承していることにも注意してください。
4.2 厳密名を付ける
厳密名 (Strong Name) を付けるために、アセンブリの属性として AssemblyKeyFile を使ってキーファイルを指定します。
キーファイルは次のコマンドで作成します。mykey.snk はこれから作成するキーファイル名です。
> sn -k mykey.snk
Microsoft (R) .NET Framework Strong Name Utility Version 1.1.4322.573
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
Key pair written to mykey.snk
4.3 アセンブリをライブラリとして作成する
C# で上記の mymath.cs をコンパイルします。このときターゲットとして library を指定すればライブラリが作成されます。
> csc /target:library mymath.cs
Microsoft (R) Visual C# .NET Compiler version 7.10.6001.4
for Microsoft (R) .NET Framework version 1.1.4322
Copyright (C) Microsoft Corporation 2001-2002. All rights reserved.
4.4 RegAsm で .NET コンポーネントを COM+ コンポーネントとして登録
RegAsm を使って、.NET コンポーネントを COM+ コンポーネントとしてレジストリに登録します。
> RegAsm mymath.dll
Microsoft (R) .NET Framework Assembly Registration Utility 1.1.4322.573
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
Types registered successfully
4.5 GAC にコンポーネントを登録
.NET コンポーネントを COM+ として使うには、GAC (Global Assembly Cache) への登録が必要です。
> gacutil -i mymath.dll
Microsoft (R) .NET Global Assembly Cache Utility. Version 1.1.4322.573
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
Assembly successfully added to the cache
5. 動作試験
次のコードを test.vbs として保存します。
Dim o
Set o = CreateObject ("MyTest.MyMath")
WScript.Echo "1+2=" & o.Add(1, 2)
Set o = Nothing
CScript.exe を使って実行し、プログラム識別子 "MyTest.MyMath" を持つコンポーネントが動作したことを確認します。
>cscript test.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
1+2=3
付録 (makefile)
この資料で説明した手順は、makefile を用いて自動化することが出来ます。
CSC = csc.exe
TARGETNAME=mymath
SOURCE_FILE=mymath.cs
OUTDIR=.\chk
all: "$(OUTDIR)\$(TARGETNAME).dll"
clean:
-del $(OUTDIR)\*.xml
-del $(OUTDIR)\*.pdb
cleanall:clean
-del $(OUTDIR)\$(TARGETNAME).dll
regascom:
RegAsm "$(OUTDIR)\$(TARGETNAME).dll" /tlb:$(OUTDIR)\$(TARGETNAME).tlb
GacUtil -i "$(OUTDIR)\$(TARGETNAME).dll"
"$(OUTDIR)" :
@if not exist "$(OUTDIR)" mkdir "$(OUTDIR)"
CSC_OPT=\
/nologo\
/target:library\
/out:$(OUTDIR)\$(TARGETNAME).dll\
/doc:$(OUTDIR)\$(TARGETNAME).xml\
/debug+\
/debug:full\
/optimize-\
/warn:3
REF=\
/r:System.EnterpriseServices.dll
$(OUTDIR)\$(TARGETNAME).dll: "$(OUTDIR)" $(SOURCE_FILE) mykey.snk
$(CSC) $(CSC_OPT) $(REF) $(SOURCE_FILE)
mykey.snk:
sn -k mykey.snk
この内容の makefile を用いると、この資料の手順 4.1 から 4.5 は次の二つのコマンドで実行できます。
> nmake
> nmake regascom