Web/DB プログラミング徹底解説

ホーム > Windows 徹底解説 > .NET コンポーネントを COM+ で使う

.NET コンポーネントを COM+ で使う

1. はじめに

.NET Framework では COM+ コンポーネントとして動作可能なコンポーネントを作成する仕組みも用意されています。ここでは C# を用いて COM+ コンポーネントを作成する方法を紹介しています。

2. 環境

この演習を行うためには、以下をインストールしておく必要があります。

  • Visual Studio .NET

コマンドは、Visual Studio .NET Command Prompt から実行してください。

3. 演習の流れ

  1. インターフェイスを公開するよう属性を設定する
  2. 厳密名を付ける
  3. アセンブリをライブラリとして作成する
  4. RegAsm で .NET コンポーネントを COM+ コンポーネントとして登録
  5. 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