ActiveXコントロールをC#でつくる

タイトルに偽り有です。

ユーザ環境でプログラミングしてもらえるようなSDKを「何でリリースするか?」って結構難しい話だと思います。言語の問題以上に、Native, Managedどちらで公開するか? は大きな問題です。Managedしかないだろぅと思っている方はちょっと先行く方です、現実は違います。2014年現在サポート切れたVB6.0以前の環境も依然として現役なのです。作り手はManagedで作りたいけどVB6.0で使えないとなると裾野を狭めてしまうことになります。ユーザあってのソフトウェア、当然ないがしろになんてできません。

「COMがあるじゃん」その通りです。ただ誰しも組込む知識があるわけではありません。「ソフトウェアはただのツールで毎度毎度覚えてられないよ」、という方も大勢いらっしゃいます。そんな方に今でも使われている(よう)なのはActiveXコントロールです。VBを使う人ならGUI上でドラッグアンドドロップでほいっとできる手軽さが今でも受けています。長い前振りですが、そんなわけで今日はC#でActiveXコントロールを作ってみようかと…

①WindowsFormControlライブラリとしてプロジェクトを新規に作成します。
②プロジェクトのビルドの設定から “COM相互運用機能の登録”にチェックをつけます。(下図)

ビルド設定

③ユーザコントロールを作成し、公開属性をつけます。

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

namespace ControlLibraryTest
{
    [ClassInterface(ClassInterfaceType.AutoDispatch)]
    [Guid("052347A1-359C-4C31-A78D-ECC636994460")]
    [ProgId("ControlLibraryTest.TestControl")]
    public partial class TestControl: UserControl
    {
        public TestControl()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            labelCurrentTime.Text = DateTime.Now.ToString();
        }
    }
}

ローカルで実行するだけなのでこれだけ。あ、管理者として実行してくださいね。あとはhtmlで、以下のような感じで。 ActiveX Control Padのダウンロードしておくと確認が簡単にできます。

ActiveXControlPad2

親要素の<OBJECT ID/>タグを作った後、左の列に出てくるボタンでGUI操作してやると<PARAM/>子要素が勝手にできます。このHTMLを表示するとこんな感じ。

html表示

できました。ただ、待ってください!これはActiveXですが、ユーザ環境でドラッグアンドドロップで使えるActiveXコントロールではありません。そう、タイトルに偽り有と書いたのはこれのことで、C#でActiveXのDLLは作成はできるし署名もすれば公開できるんだけど、ActiveXコントロール (ocx) はできないのです。

この点をちゃんと理解して環境選択する必要がありそうです。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中