LoginSignup
1
1

More than 3 years have passed since last update.

VS2019 VC++ ATLでCOM DLLを作ってみた

Last updated at Posted at 2020-11-14

はじめに

Visual Studio 2017 Visual C++ による ATL の基本
を参考にさせて頂きました。圧倒的感謝……!
COM DLLはActiveXコントロール(旧 OLEコントロール)とも言うようだ。

環境

実行環境:Windows 10 Home (64bit)
開発環境:Visual Studio Community 2019
C++ によるデスクトップ開発
最新の v142 ビルド ツール用 C++ ATL (x86 および x64)
オプションにチェックが入っていること。

プロジェクトの作成

プロジェクト テンプレート:ATL プロジェクト [C++]
プロジェクト名:ATLProject1
[ATL プロジェクト]ダイアログはデフォルト。

ATLProject1PSというプロジェクトも作られるが今回はノータッチ。

クラスの追加

ソリューション エクスプローラーの ATLProject1 に新しい項目を追加する。
種類:Visual C++/ATL/ATL シンプル オブジェクト
名前:ATLSimpleObject

[ATL シンプル オブジェクト]ダイアログ
ProgID:Simple.Obj
その他はデフォルト。

メソッドの追加

メニューから表示→クラス ビューを選択する。
クラス ビュー
ATLProject1/IATLSimpleObject にメソッドを追加する。

[IDL メソッドの追加]ダイアログ
メソッド名:Hello
パラメーター
[in] BSTR msg

メソッドの実装

クラス ビュー
CATLSimpleObject を選択すると下の枠に Hello(BSTR msg) が表示されるのでダブルクリック。

ATLSimpleObject.cpp
STDMETHODIMP CATLSimpleObject::Hello(BSTR msg)
{
    MessageBox(nullptr, msg, L"ATLSimpleObject", MB_OK);
    return S_OK;
}

ビルド

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

識別子 "CLSID_ATLSimpleObject" が定義されていません
というエラーが出るようならソリューションの再スキャン。

管理者権限の PowerShell やコマンド プロンプトでレジストリに登録する。
regsvr32 "C:\Projects\vc++\ATLProject1\x64\Release\ATLProject1.dll"

regsvr32 "C:\Projects\vc++\ATLProject1\x64\Release\ATLProject1.dll" /u
で登録解除。

テストプログラム

JScript

hello.js
var simple = new ActiveXObject("Simple.Obj");
simple.Hello("hello, JScript");

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

C#

プロジェクトに参照を追加する。
[参照マネージャー]ダイアログ
COM/ATLProject1Lib をチェックする。

ソリューション プラットフォーム:x64

Form1.cs
        private void button1_Click(object sender, EventArgs e)
        {
            var simpleObject = new ATLProject1Lib.ATLSimpleObject();
            simpleObject.Hello("hello, C#");
        }
1
1
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
1
1