- PR -

ActiveX Controls の開発について

投稿者投稿内容
hg
会議室デビュー日: 2007/06/27
投稿数: 7
投稿日時: 2007-07-02 14:39
引用:

渋木宏明(ひどり)さんの書き込み (2007-06-27 15:28) より:

大昔に "ActiveX SDK" というものが配布されていたので、その中に入っていたかもしれません。



情報ありがとうございます。
ActiveX SDKで探してみます。

引用:

具体的にはどういう点で? ファイル容量ですか?


FlashPlayerみたい新規PCにインストールできるものを作りたいので、
ATLを含めていいのか検討しています。

FlashPlayerもATLを使っているのか、確かめる方法ってあるのでしょうか?


hg
会議室デビュー日: 2007/06/27
投稿数: 7
投稿日時: 2007-07-02 14:48
引用:

とっちゃんさんの書き込み (2007-06-27 15:58) より:

すいません。Inside OLE2 です。もっているのなら、その中に
C++ での実装がありますよ。IClassFactory とか...

IDispatch については記述があったかどうかちょっと覚えていませんが
こちらはあんまり細かに扱われているものはなかったような気がします。

で、サンプルですが、MFC も ATL もサンプルとしては役に立つと
思うのですが、それを参考に作るというのは難しいですか?

実際に動くものなので、ステップ実行すれば、何をやっているかなども
具体的に追いかけられます。

全部のソースがありますから、特定の箇所だけ見えないなどもありません。


難しくないです。現状は、ATLで作成しました。
現状は、ATL80.dllを使っています。

また、ソースも追ってみました。

引用:

渋木さんも書いてますけど、「なにが」要件に合わないのでしょうか?

スタティックリンクでだめだとなると、完全自前で実装でも
要件に合わない可能性が出てきますけど?

もしかして、/clr とかスイッチつけているのが原因ということは
ないですよね?



FlashPlayerみたいに新規PCの初期状態で、実行できるものが要件です。
現状は、ATLで動いているので、問題なくなりました。
しかしながら、自前の実装を行なってみたいと思っております。

clrスイッチは、詳しく理解していないので、使っておりません。

とっちゃん
大ベテラン
会議室デビュー日: 2005/07/19
投稿数: 203
投稿日時: 2007-07-02 16:03
引用:

hgさんの書き込み (2007-07-02 14:39) より:

FlashPlayerみたい新規PCにインストールできるものを作りたいので、
ATLを含めていいのか検討しています。

FlashPlayerもATLを使っているのか、確かめる方法ってあるのでしょうか?



バイナリレベルでサーチすればそれっぽい名前は見えるかもしれませんが...
どうですかね?自分で作ったものも含めてチェックしたことはないのでよくわからんです。


引用:

難しくないです。現状は、ATLで作成しました。
現状は、ATL80.dllを使っています。


引っかかってるのはここですか?

であれば、ATL はスタティックリンクできます。
もちろん、CRT のレベルも含めてスタティックリンクが
前提ですので、ファイルサイズは大きくなりますけど。

どこかのコンパイルオプションをいじるだけで設定できますよ。


ところで、FlashPlayer のようなということは、cab+inf で配布できるということですか?
であれば、CRT を DLL で配布もOKだと思いますが、問題は inf でのインストールが
SxS(Side By Side)に対応しているかどうかですね。

正直、.inf 形式のインストールについては全くと言っていいくらい知らないので
できるかどうかもさっぱりわかりませんが。

_________________
// とっちゃん(高萩 俊行)@わんくま同盟
// とっちゃん’Blog
// MS-MVP for Developer Tools - Visual C++
// WindowsInstallerの話題はhttp://www.freeml.com/msiまで
Atata!!
常連さん
会議室デビュー日: 2007/05/22
投稿数: 20
投稿日時: 2007-07-02 22:37
引用:

しかしながら、自前の実装を行なってみたいと思っております。


私が5年ほど前に C++ と Platform SDK のみで作成したソースがあります。
まぁ、参考になれば良いかなと思って私のサイトにアップしました。
www5.plala.or.jp/atata/download/axcontrol.lzh

ただし、現状ではIEに必須のインターフェースが実装されていないため、
IEに表示することは出来ません。動作するコンテナはVB6ぐらいだと思います。
これを理解してIEのために拡張する手間を考えると
逆にATLを使うのに何のためらいも感じなくなるかもしれません。

# しかしまぁ、5年前の自分のソースを今見ると稚拙なもんです。
# それが故にサンプルの解析は比較的簡単かもしれませんが・・・。
hg
会議室デビュー日: 2007/06/27
投稿数: 7
投稿日時: 2007-07-13 18:37
引用:

とっちゃんさんの書き込み (2007-07-02 16:03) より:

であれば、ATL はスタティックリンクできます。
もちろん、CRT のレベルも含めてスタティックリンクが
前提ですので、ファイルサイズは大きくなりますけど。

どこかのコンパイルオプションをいじるだけで設定できますよ。



なるほどですね。
アドバイス、ありがとうございます。

hg
会議室デビュー日: 2007/06/27
投稿数: 7
投稿日時: 2007-07-13 18:39
引用:

Atata!!さんの書き込み (2007-07-02 22:37) より:

私が5年ほど前に C++ と Platform SDK のみで作成したソースがあります。
まぁ、参考になれば良いかなと思って私のサイトにアップしました。
www5.plala.or.jp/atata/download/axcontrol.lzh

ただし、現状ではIEに必須のインターフェースが実装されていないため、
IEに表示することは出来ません。動作するコンテナはVB6ぐらいだと思います。
これを理解してIEのために拡張する手間を考えると
逆にATLを使うのに何のためらいも感じなくなるかもしれません。



ソースのほう、ありがとうございます。
これを参考にさせていただきます。

Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-07-13 19:07
こんばんは。

引用:

hgさんの書き込み (2007-07-13 18:39) より:
ソースのほう、ありがとうございます。
これを参考にさせていただきます。



ついでに私も…

Atata!!さん
ダウンロードさせていただきました。
貴重なソースコードありがとうございます。
大切な資料として保管させてもらいます。

あとIEに必須なインターフェイスって…?
10個以上もインターフェイスを実装しているのに
まだ足りないんですね。


[ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2007-07-13 19:08 ]
Atata!!
常連さん
会議室デビュー日: 2007/05/22
投稿数: 20
投稿日時: 2007-07-14 06:08
引用:

あとIEに必須なインターフェイスって…?


会社では動かなかったんですが、自宅で動かすと動きますね・・・。
多分セキュリティの問題だと思いますが、詳細は調べてないので謎です。

# 私はIObjectSafetyが必須だと思っていましたが実装なしでも動作しました。


私が仕事で作成したIE用のActiveXコントロールで実装したインターフェースを調べてみましたが、
以下のインターフェースしか実装していませんでした。
・IConnectionPointContainer
・IOleControl
・IOleInPlaceActiveObject
・IOleInPlaceObject
・IOleObject
・IPersistPropertyBag2
・IPersistStorage
・IPersistStreamInit
・IProvideClassInfo
・IRunnableObject
・IViewObjectEx
提示したサンプルとは IPersistPropertyBag2 の有無だけが異なりますが、
このインターフェースはそもそもオプションなのでIE上の実行の可否に影響しません。
ただ、レジストリ登録ファイルには、以下の記述を追加しており、
セキュリティ関連の設定を追加していました。

'Implemented Categories'
{
{7DD95801-9882-11CF-9FA9-00AA006C42C4}
{7DD95802-9882-11CF-9FA9-00AA006C42C4}
}

# これがIObjectSafetyの代わりとなっているわけです。


ちなみに私が仕事でフレームワークを使用しないActiveXコントロールを作成した理由は、
Netscape4のプラグインを同一のDLL内に実装するためでした。
依存モジュールを極力減らすことが本来の目的だったのですが、
どこかで方向性を間違ってしまったようです。
今では分けて実装した方が良かったなと思っています。
そもそも1つのDLLにまとめて実装する意味がないので・・・。

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