• ベストアンサー

COMコンポーネントって何?

よく、COMコンポーネントって聞くんですが、何のことかわかりません。VBやVBAのような言語名ではないことは、なんとなく分かるのですが・・・。できるだけわかりやすく教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • hyde-la
  • ベストアンサー率28% (42/146)
回答No.6

失礼ですが、クラスをご存知ないのであればCOMは多分 全く理解できないでしょうねぇ クラスについても、ご自分で勉強が必要だとは思いますが 簡単に説明しておきます。 構造体(属性)に、関数(操作)を加え、カプセル化したものです。 従来のプログラミングでは、変数をばらばらに扱わず、 構造体と呼ばれる型に関係ある変数をまとめて、 プログラム中のデータ構造が明確になるようにしておきました。 そこで、この構造体に専属の関数を加えてしまえば、 その構造体は単独で自分の面倒をみることが出来るようになります。 それがクラスです。 その結果、プログラム中のデータや処理が、クラス単位で整理され、 それぞれ部品のように組み替えが可能になりました。 このように、クラス単位にプログラムを分割することで 巨大なプログラムを明瞭にする言語をオブジェクト指向言語といいます。 また、クラスには親と子があり、「継承」という考えを用いて どんどんバージョンアップや特化を行うことが容易です。 VBで説明すると、 Dim value as A として変数を宣言した場合、クラスは「A」です。 valueはオブジェクトや、インスタンスと呼ばれます。 valueを使って、Aに含まれる関数を呼び出して、valueを 操作することが出来ます。 value.Init() 等。 ざっくり説明するとこんな感じです。 詳細については、各言語の書籍を参照してください。 このようにして作ったクラスを、 ・他の言語から使いたい ・ネットワーク経由で使いたい などと言った機能を実現する、Microsoft提供の方法の一つが、 COMやDCOMと呼ばれるものです。 COMは、他のプログラムからの使いまわしに強いので、 一度作っておけば、VB、Delphiは勿論、VBScript、JavaScrips、WSHなどから 呼び出しが可能です。 また、COM自体のバージョンが上がっても、それを呼び出してる プログラム自体には変更の必要がありません。

holydevil
質問者

お礼

ありがとうございました。 非常に丁寧に御回答いただきありがとうございました。 仕事柄プログラムは使わないため、今は分からないことだらけですが、今後ともよろしくお願いします。 (今はASPでWEBアプリを作りたいと思ってます。)

その他の回答 (5)

  • hyde-la
  • ベストアンサー率28% (42/146)
回答No.5

すいません、クラスオブジェクトではありません、 「クラス」でお願いします。 コンピュータが扱うデータは基本的にすべて数値ですが、 アスキーコードなど、ある範囲の数値を人間に見やすい 文字に変換可能なものを「テキスト」といいます。これはご存知の通り。 そして、そうでないものが「バイナリ」です。 つまり、BMPやJPEG,EXEはバイナリファイルです。 HTMLやJavaScript、ソースファイル等はテキストファイルです。 語弊を承知でより簡便に言うなら、「文字」しか書いてないのはテキスト、 文字以外の数値があるならバイナリです。 ソースファイルはテキストから、コンパイル・リンクの過程でバイナリファイルとなります。 COMオブジェクトは、この状態でないとなりませんので、 つまりソースが何の言語であったかなんてことは どうでもよくなっている、ということです。 因みに、COMではC・C++でいうヘッダファイルの代わりに IDLというインターフェイス定義言語という専用の簡易な言語を使います。 これは、ただの定義を記述する言語ですので非常に簡単で、どちらかというと C言語みたいな、設定ファイルです。

holydevil
質問者

補足

ありがとうございます。 なんとなく見えてきました。あとクラスってどういうことなんでしょう?クラスの意味がはっきり分かりません。

  • hyde-la
  • ベストアンサー率28% (42/146)
回答No.4

ごめんなさい、説明が抜けました。 COMの特徴についてですが・・・ ・インターフェイスの統一的な呼び出し手段がある ・参照カウンタを持つ という重要な二点のことを説明忘れてました。 COMは、クラスオブジェクトですので継承によって さまざまなインターフェイスが追加されて行きます。 それらを統一的に呼び出す手段として、QueryInterface メソッドが存在してます。 参照カウンタは、COMが参照されるたびにインクリメントし 解放されるとデクリメントするカウンタ値です。 これが0になった時にメモリから削除されます。 Javaをご存知でしたら、GarbegeCorrectorと考えると分かり易いと 思います。 要するに、C++でも容易にメモリリークを防げる仕組み、と。 実際にCOMを作ってみるのでしたら、やはり書籍があると 助かると思います。 VBだと私はちょっと解りません。(簡単に出来ると思いますが)

holydevil
質問者

補足

クラスオブジェクトってふつうのオブジェクトと何が違うのでしょうか?あと、バイナリってなんですか? 超基本的な質問ですみません。

  • hyde-la
  • ベストアンサー率28% (42/146)
回答No.3

ComponentObjectModelの略です。 コンポーネントとは、ソフトウェアの部品として機能する オブジェクトのことです。 関数との違いは、クラスとしてカプセル化してあるので 保守性・再利用性とともに、ブラックボックス化しているので 利用が簡単、という点もあります。 定義については他の方がおっしゃってる通りなので COMを使うメリットと特徴について軽く説明しておきます。 また、ActiveXやDCOMなども含めて、COMといってしまうことが 多々有るようです。 CORBAをご存知なら、それに似たものと考えてください。 利点: 言語・処理系に依存しない(バイナリ)コンポーネント つまり、VC++でCOMを作ってそれをVBやDelphiから自由に呼び出せる。 計量で高速なコンポーネントも設計可能。 実際のCOM作成について: DLLとの違いは、DLLが関数ベースであるのに対して COMは基本的にクラスベースなので、独立性・再利用性・保守性の高い コンポーネントの作成が簡易です。 DLLでも一応クラスの形式を取ることは出来ますが、バージョンアップ時 インターフェイスが変わってしまうと問題があります。 COMではJavaのinterface,implimentに似た仕組みで インターフェイスを統一できます。 ネットワーク越しに実行出来る(透過性)ものをDCOM、 GUI要素を持つCOMをActiveXなどと呼び分けるのが従来のようです。 これはMicrosoft社の技術の重要なポイントですので Windows環境でプログラムを作る以上、押さえておかねばならない ネジクギ的存在になってゆくことでしょう。

回答No.2

COMとはバイナリをどのように作るかを示す規約で、ソフトウェアをコンポーネントで1つの管理単位とし、その中にあるオブジェクトを再利用可能にします。 ですから、COMで開発したソフトウェアは、すべてソフトウェアのバイナリの部品として再利用できます。 これ以上簡単な説明をしようとすると、いろいろと誤解が生じそうなので、とりあえずこんなところでしょうか。

noname#9414
noname#9414
回答No.1

Microsoft Developer Network(MSDN)には、以下の ように書かれています。 『COMとは』 COMはActiveXコントロールとOLEの土台となる 基本的な"オブジェクトモデル"です。COMによって、 オブジェクトの機能は、ほかのコンポーネントや ホストアプリケーションに公開されます。COMは オブジェクトの公開方法と、プロセス間、または ネットワーク間での公開の動作方法を定義します。 また、COMはオブジェクトのライフサイクルも 定義します。 一応Windowsプログラムでは最近よく使われるように なってきているようです。 #結構使うのは難しいですが・・・ もっと詳しく勉強したいのであれば、プログラムの 本が置いてある本屋さんに行って、本を購入しても いいのではないでしょうか。 ではでは☆

関連するQ&A

  • COMコンポーネントファイルが参照できない。

    現在VisualBasic2010expressを使っています。 オーディオの録音用プログラムを作りたいと思い とあるホームページからwave入出力用のCOMコンポーネントファイル(.ocx)をダウンロードしました。 E:ドライブの「system32」の中に入れVBから「ツール→アイテムの選択→COMコンポーネント→参照」と操作しsystem32に入ってる目的のファイルを探したんですがどこにも見当たりません。 VBではなく普通に「sysytem32」を開いた場合は目的のファイルはきちんと存在します。 またVB上でも「system32」上ではなく「system」のフォルダに置いた場合は参照できます。 なぜ「system32」上だと参照できないんでしょうか? 読み取り専用、隠れファイル等もチェックを外してみたのですが変わりませんでした。 VBでファイル名を示し実行した場合は「そのファイルは存在しません」となります 使用しているOSはWindows8です。8が原因何でしょうか? 初歩的な質問で申し訳ありません。

  • COMコンポーネント・・・?

    Windows終了時にいつもCOMコンポーネントのインストール中というのが表示され、“すぐに終了”というボタンを押さない限り正常終了できません。 COMコンポーネントとは一体何なのですか?

  • BluetoothのCOMポートの変更方法(COM16以下に)

    Princetronのブルートースアダプターを購入しました。 セットするとCOM40になりました。 VBのCOMコンポーネントのポートNoは最大でCOM16までです。 どうしたらCOM40を16以下にできるでしょうか。教えてください 新規接続の設定では40から62までの範囲でしかできません。

  • コンポーネントについて

    VBでコンポーネントを使用する際、使用者がそのdllやocxファイル等を持っていない時のために、実行ファイルと同じディレクトリに必要なdllやocxを置いて、それを利用してコンポーネントを使用したいと思うのですが、どうすればよいのでしょうか?わざわざsystem32にコピーするのは面倒ですので。。

  • ダイアル型の部品コンポーネントってありますか?

    お客様の要望で、見た目がダイアル型のツマミのようなインターフェースにして欲しいとの要望があがり困っています。 このようなコンポーネントが用意されている言語はありますか? 実際、B'sPlayerやPowerDVDなどの動画再生ソフトでは、このようなインターフェースが実装されているようです。 マウスでドラッグすると値が増減するような部品が欲しいのです。 言語はVBやJavaだと助かります。 ちょっとあいまいな質問になってしまったようですが、よろしくお願いいたします。

  • コンポーネントの追加ができません

    Win2000ProでVB6.0を使用しています administratorではコンポーネントの追加ができるのに、Win2000Serverに登録された一般ユーザではコンポーネントの追加ができません 一般のユーザでコンポーネントの追加ができるようにするにはどうしたらいいのでしょうか?

  • COMコンポーネントの構造の本質的理解ができない

    プログラミングを始めて間もない初心者です。 windowsアプリケーションを制御対象として扱おうと、win32oleライブラリをrequireしてCOMコンポーネントを扱う方法をネット上で色々調べてみたのですがどうも腑に落ちない点・分からない点があるので質問します。 rubyリファレンスマニュアルからリンクされているサイト(http://jp.rubyist.net/magazine/?0003-Win32OLE)において、以下のような記述があります。 >COM ではインスタンスを生成するときに「COM コンポーネント」を指 >定するための ProgID を引数として WIN32OLE.new メソッドを実行し >ます。 COM コンポーネントとは、Windows に登録された、ある機能 >(たとえば、IE や MS Office の制御機能) を提供するためのもので >す。この「COM コンポーネント」を利用して作成したインスタンス を>「COM オブジェクト」とこの記事では呼んでいます。 COM オブジェク>トを作成した後は、その COM オブジェクトで定義されている「メソッ>ド」を実行することでそのコンポーネントが提供する機能を実現する >ことができます。 この文に従えば、作成したCOMオブジェクトを扱う方法を知るためにはCOMオブジェクトで定義されているメソッドを参照すれば良いこととなります。そこで自分もWIN32OLE.new("InternetExplorer.Application") によって得たCOMオブジェクトにWIN32OLE.ole_methodsを適用することでメソッドの一覧を取得しましたが、前述のサイトで紹介されているie.document.all.Item()というメソッドを探してみてもどこにも見つかりません。 これはどういうことなのかと思い、ネット上で色々とCOMとは何か、タイプライブラリとは何かなどを調べて見ましたが、いまだCOMの全体像の把握ができません。 たとえばrubyの場合、あるオブジェクトに対して使えるメソッドというのはそのオブジェクトが該当するクラスに於いて定義されているメソッド((1))及びkernelモジュールで定義されている組み込みメソッド((2))ですよね。 (初心者なのでこの理解にも間違いがあるかもしれませんがその場合はご指摘お願いします) このような考え方でいくとWIN32OLE.ole_methodsによって取得したメソッドの一覧は(1)にあたり、document.all.Item()というのは(2)にあたるのではないかという考えもできるかと思うのですが誰か正しい理解をご教授いただきたいです。 質問が長くなってしまいましたがie.document.all.Item()というメソッドがどこに定義されているのか、そういったメソッドの定義場所はCOMにおいてどのように見つけるのか、そこだけでもいいのでよろしくお願いします。

    • ベストアンサー
    • Ruby
  • VC++6.0でMSCommコンポーネントを使う方法

    こんにちは。 VC++6.0でMScommコンポーネントを使いたいのですが どのようにすればMSCommのコンポーネントが使えるのでしょうか? VB6.0での使い方は判ったのですが、VC++6.0での使い方が 判りません。 よろしくおねがいたします。

  • VBのコンポーネントについて

    Visual Basicのコンポーネントの『Activex Data Object 2.5 Library』を使いたいのですが・・・ないのです。VersionはVB6.0 Enterpriseを使ってます。学校で使った時は(バージョンは違うと思うですが。多分Professionalだとおもうのですが)コンポーネントの項目にありました。Versionがかわると機能もつかわるのでしょうか?『Activex Data Object 2.5 Library』を使いたい場合どうすればいいのでしょうか?

  • [VB5] RDO:エラー'429' ActiveX コンポーネントはオブジェクトを作成できません

    Excel97のVBAを使って、RDOでSQLserverに接続しようとすると 「ActiveX コンポーネントはオブジェクトを作成できません」 というエラーがでます。 VB5.0を再セットアップするとよいと以下のURLにはのっていますが http://www.microsoft.com/japan/support/kb/articles/J043/1/96.asp VBがインストールされていないマシンでは、どうしたらよいのでしょうか? RDOのバージョンは2.0です。