- PR -

ActiveXの関数を呼び出せない

1
投稿者投稿内容
すもも
会議室デビュー日: 2006/11/29
投稿数: 7
投稿日時: 2006-12-01 15:49
こんにちわ、すももです。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35198&forum=7&7
こういう経緯からActiveXに興味を持ったので
いろいろやって見ようとActiveXの作成をして見ようと試みました。

とりあえず、最初はシンプルなものを、ということで
ブラウザのボタンをクリックするとエディタを開く
というイベントを作って見ようと思いました。
しかし上手くいきません。

以下がその手順です。

1.VisualStudio2005でメニューの
  ファイル>新規作成>プロジェクト
 で新しいプロジェクトダイアログが起動
  Visual C#>クラスライブラリ
 を選択し、プロジェクト名 SAMPLE1 で[OK]ボタンをクリック
 ソリューションエクスプローラーに
  Properties、参照設定、Class1.c
 ができる。

2.Class1.csをSAMPLE1.csにリネームし次のように書き換えて全てを保存
コード:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;

namespace SAMPLE1
{
    public class SAMPLE1
    {
        public bool DoExec()
        {
            Process.Start("C:\\〜\\HIDEMARU.exe");
            return true;
        }
    }
}



3.Propertiesを開き
  アプリケーション > アセンブリ情報
 で アセンブリをCOM参照可能にする にチェックを入れて[OK]し全てを保存
  ビルド > 構成
 を Release にして COM相互運用機能の登録 にチェックをいれて全てを保存

4.メニューの
  ビルド > ソリューションのビルド
 を行うと成功し、 ワークフォルダの bin\Release の下に
  SAMPLE1.dll、SAMPLE1.pdb、SAMPLE1.tlb
 が作成されるのを確認

5.SAMPLE1.INFファイルを作成
コード:
; Sample INF file for GOMI1.dll
[version]
; version signature (same for both NT and Win95) do not remove
signature="$CHICAGO$"
AdvancedINF=2.0

[Add.Code]
SAMPLE1.dll=SAMPLE1.dll

; needed DLL
[SAMPLE1.dll]
file-win32-x86=thiscab
FileVersion=1.0.0.0
DestDir=11
RegisterServer=yes



6.SAMPLE1.CABを作成
コード:
  CABARC n SAMPLE1.CAB SAMPLE1.dll SAMPLE1.inf



7.作成したSAMPLE1.CABをウェブザーバに置いて同フォルダ内に
 SAMPLE1.HTMLを作成
コード:
<html>
<body>
<OBJECT id="SAMPLE1"
        classid="CLSID:09ede1cc-bf71-4908-b384-44a91d6619f2"
        progid="SAMPLE1.dll#SAMPLE1.SAMPLE1"
        codebase="./SAMPLE1.CAB#version=1,0,0,0"
        width="1" height="1">
</OBJECT>
<form action="">
<input	type="button" name="execbtn" value="実行">
</form>
<SCRIPT language="VBScript">
<!--
Sub execbtn_OnClick()
	SAMPLE1.DoExec()
End Sub
-->
</script>
</body>
</html>



8. http://--/SAMPLE1.HTML
をIEで実行すると次のエラーが出ます
「エラー: オブジェクトがサポートしていないプロパティまたはメソッドです。: 'SAMPLE1.DoExec'


エラーから判断するに、DoExecが見えていないとのことです。
いろいろ調べたのですが、手順のどこが悪かったのか
どうにも判明できません。

お手数ですが、どの手順に抜かりがあるのかご指摘いただけないでしょうか。
よろしくお願いします。

なお、一番参考にしたのは
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33069&forum=7&2
のページです。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-12-01 23:49
引用:

5.SAMPLE1.INFファイルを作成



の記述は、VC++(アンマネージド)/VB6 等で作成された「真の ActiveX コントロール」を登録する場合の記述です。

C# や VB.NET のような、.NET 系のプログラミング言語で作成された .NET の COM 連携機能を利用した、言わば「インチキくさい ActiveX コントロール」は、この記述では登録できません。

「インチキくさい ActiveX コントロール」は、.NET Framework SDK に付属の Regasm.exe ツールを使用して登録します。

ただし、Regasm.exe は単独での再配布を許可されていないので、「インチキくさい ActiveX コントロール」は .CAB ファイルによる配布に適していません。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
すもも
会議室デビュー日: 2006/11/29
投稿数: 7
投稿日時: 2006-12-04 11:00
あああ なんとっ
tp://www.users.gr.jp/blogs/hidori/archive/2004/11/17/6131.aspx
を書いたひどりさんなのですね
感激です

ということは、.NET系プログラム言語で作成したものは
.NET Frameworkを通してインストールされるべきなのですか。
.NET Frameworkを利用しないのであれば
VC++やVB6を使って作るのがいいのですか。
奥が深いです。

勉強しなおしてまいります。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-12-04 18:12
引用:

ということは、.NET系プログラム言語で作成したものは
.NET Frameworkを通してインストールされるべきなのですか。



(経緯や背景をすべて省略して)簡単に言えばそうなります。

引用:

.NET Frameworkを利用しないのであれば
VC++やVB6を使って作るのがいいのですか。



ということになりますが、「今更」感もあるので、.NET 系のプログラミング言語で作ったユーザコントロール入りのアセンブリを「ActiveX コントロール的」に使う方法もあります。

http://www.gotdotnet.com/japan/team/windowsforms/iesourcing.aspx

[ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2006-12-05 06:40 ]
1

スキルアップ/キャリアアップ(JOB@IT)