掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DLLでコンポーネントの追加をするには? (ID:76923)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
なにか誤解があるようですね。 COMの世界の話になりますが、 COMには2種類あります。 ユーザインターフェイスを持つ「コントロール」と ユーザインターフェイスをもたない「コードコンポーネント」です。 前者はVBから、「コンポーネントの追加」で追加すると ツールボックスに追加され、それをForm上に配置して プロパティを設定して使います。 後者は「参照設定」してDim 〜 NewやSet 〜CreateObjectなどで インスタンスを生成して使います。 前者のファイルの拡張子は通常ocxで、後者は通常dllであることから、 コントロールを格納したファイルをocxファイル、 コードコンポーネントを格納したファイルをdllファイルと 呼ぶこともあります。 しかしながら、拡張子は単なる識別の目安でしかありませんし、 そもそもビルドされたコントロールのバイナリ構造は dllと同一形式ですので、ocxの拡張子をdllに変えても レジストリさえきちんと設定しておけばそれなりに動作します。 拡張子がdllだろうがocxだろうが、 ツールボックスに追加するのはVB側の機能です。 VBでは「コンポーネントの追加」で追加すると ツールボックスに追加される仕組みになってますから、 「参照設定で参照したときに、ツールボックスに追加」は VBの改造でもしない限り不可能です。 そして、VBの改造はライセンス契約違反になりますので、 事実上、「参照設定で参照したときに、ツールボックスに追加」 はできないことになります。 それを踏まえた上で >コンポーネントでDLLは使えないのですか? 拡張子をdllにできるか?という意味なら可能です。 やろうと思えばtxtだろうとmdbだろうと可能です。 拡張子には識別の参考になる以上の大きな意味はありません。 >参照で追加しようとしてもファイルの種類にDLLがないんですけど・・・ 普通、拡張子Exeのファイルもいくらかあるのですが・・・。 レジストリにdllしか登録されてないからでしょう。 一度ActiveX Exeを作ってみれば、参照設定できるのが dllだけでないことがわかるでしょう。 余談ですが、非ビジュアルな使い方に限り、コントロールを 「コンポーネントの追加」で追加せずに使用することが可能です。 たとえば、MaskEditコントロールは、通常「コンポーネントの追加」で 追加して使用しますが、 Option Explicit Private Sub Command1_Click() Dim objMask As Object Set objMask = CreateObject("MSMask.MaskEdBox") objMask.Text = "aaa" MsgBox objMask.Text End Sub のようにして、CreateObjectして、コードコンポーネントのように 使うことはできます。 ただし、VisibleやTop,Leftのような表示に関連する プロパティは使えません。 こんな方法、使う意味があるか、といわれると疑問ですが、 TimerやMSCommのように、本来コントロールにする必要のない コントロールなら使う価値がないでもないでしょう。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.