LoginSignup
0
3

More than 3 years have passed since last update.

VS2019 C#でCOM DLLを作ってみた

Last updated at Posted at 2020-11-15

はじめに

を参考にさせて頂きました。圧倒的感謝……!

環境

  • Windows 10 Home (64bit)
  • Visual Studio Community 2019

手順

プロジェクトの作成

プロジェクト テンプレート:クラス ライブラリ (.NET Framework) [C#]
プロジェクト名:ClassLibrary1

クラス ライブラリ (.NET Standard)
とは別なので注意。

インタフェースとクラスの作成

Class1.cs
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Sample
{
    [ComVisible(true)]
    [Guid("EC463B16-E298-478E-A836-44585A30F806")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface ITest
    {
        void Hello(string msg);
    }

    [ComVisible(true)]
    [Guid("A81D546F-6F4E-49E0-9A2B-A9DCC725C489")]
    [ProgId("Sample.Test")]
    [ClassInterface(ClassInterfaceType.None)]
    public class Test : ITest
    {
        public void Hello(string msg)
        {
            MessageBox.Show(msg, "Test");
        }
    }
}

Guid はツールから作成する。

MessageBox を使うのでプロジェクトにアセンブリ参照を追加する。
名前:System.Windows.Forms

アセンブリに署名

プロジェクトのプロパティを開き、署名の「アセンブリに署名する」をチェックする。
キー ファイル:test

署名しなくともRegAsmで警告は出るが登録は可能。

ビルド

ソリューション構成:Release
ソリューション プラットフォーム:Any CPU
ソリューションのビルド。

レジストリに登録

管理者権限の PowerShell やコマンド プロンプトでレジストリに登録する。

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm ClassLibrary1.dll /codebase

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm ClassLibrary1.dll /codebase /u
で登録解除。

/tlbを付けるとCOM一覧に表示されるがC#からは利用できない模様。
dllを直接参照する手もある。

テストプログラム

JScript

test.js
var test = new ActiveXObject("Sample.Test");
test.Hello("hello, JScript");

というファイルを用意しダブルクリックする。
クラスに定義した ProgID を指定。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3