環境
Windows 11 Pro (64bit)
Visual Studio Community 2022
手順
DLLの作成
dev.bat
@echo off
path %path%;C:\Windows\Microsoft.NET\Framework64\v4.0.30319
prompt $e[33m$p$g$e[m
cmd
comtest.cs
using System;
using System.Runtime.InteropServices;
namespace Sample {
[ComVisible(true)]
[Guid("502B2BA6-D4DC-449C-BC1A-A3169CE1B267")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ITest {
int MyBeep(int dwFreq, int dwDuration);
}
[ComVisible(true)]
[Guid("FB3CB74C-E0F1-4ADD-BEEF-B60C6D78ADE8")]
[ProgId("Sample.Test")]
[ClassInterface(ClassInterfaceType.None)]
public class Test : ITest {
[DllImport("kernel32")]
public static extern int Beep(int dwFreq, int dwDuration);
public int MyBeep(int dwFreq, int dwDuration) {
return Beep(dwFreq, dwDuration);
}
}
}
GUIDは"C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\guidgen.exe"
で作成できる。
csc /t:library comtest.cs
レジストリへの登録
スタートメニューをクリックしcmd
と入力。
コマンドプロンプトを「管理者として実行」する。
COM DLLを作成したディレクトリに移動。
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm comtest.dll /codebase
RegAsm : warning RA0000 : 署名されていないアセンブリを /codebase を使用して登録すると、同じコンピューターにインストール されるその他のアプリケーションとの競合が生じる可能性があります。/codebase スイッチは署名されたアセンブリのみに使用できます。アセンブリに厳密な名前を付けて、再登録してください。
という警告は出るが正常に登録される。(署名については後述)
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm comtest.dll /u
で登録が解除される。
テスト
comtest.js
// cscript comtest.js
var test = WScript.CreateObject("Sample.Test");
test.MyBeep(440, 1000);
署名
コマンドプロンプトを「管理者として実行」する。
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\sn.exe" -k sgKey.snk
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc /t:library comtest.cs /keyfile:sgKey.snk