• ベストアンサー

ATLについて

ATLを理解するため ATLをつかった簡単なサンプルプログラムを探しているのですが 参考になるサイトや良い書籍があればアドバイスお願い致します。 「com化しておくと便利」とか聞くのですが いまいちピンときません。 DLLとは何が違うのでしょうか? com,ATL,ActiveXについて、関連があると思うのですが その関連についても分かり易くご教授頂ければ幸いです。

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>ATLで使うものはレジストリに登録する必要があるのですよね? はい、あります。 >com(ATL)の場合のEXEとDLLの違いってなんでしょうか?(3種類あるみたいですが) ATLだからというのは関係ないのでおいておきます。 COMの場合、インプロセスサーバ、アウトプロセスサーバという言い方をよくします。 インプロセス、つまり呼び出し元と同一プロセス空間で動作するCOMサーバです。 #呼び出し元をクライアント、呼び出されるCOMコンポーネントのことをサーバと呼びます。 これにあたるのが、ActiveX DLL、ActiveXコントロールのような、DLLとして動作するものです。 逆にアウトプロセスサーバは、呼び出す元とは異なるプロセスとして動作するCOMサーバです。つまり、ActiveXEXEや、ActiveXDocumentsサーバということになります。 #ちなみに、DCOMでネットワーク越しに使用可能なCOMサーバはActiveXEXEのみです。 具体例をあげますと、ActiveXDLLは、ADOやDAO、ActiveXコントロールはVBでよく使われるスプレッドシート、ActiveXEXEとActiveXDocumentsサーバは、ExcelやWord という感じです。 >EXEの場合、レジストリ登録が必要なく返値が得られない.. >でしょうか。 EXEも登録する必要があります。 DLLの場合は、Regsvr32.exeで登録するのが一般的ですが、EXEの場合は自己登録といって、/RegsterServer(だったかな?)といったオプションをつけて起動することで登録するのが一般的です。 #少なくともMFC、ATL、VBで作成されたアウトプロセスサーバはこのパラメータを受け付けます。 >このreturn S_OKは >[out,retval] VARIANT *pVal で指定した >pValを返しているのでしょうか? >しかしこのretvalがよくわかりません。 >MSDNでみるとretval:メンバの戻り値を受け取るパラメータを指定します。 >となっているのですが。 S_OKは、HRESULTの方になります。 COMのメソッド、プロパティは、戻り値はvoidまたはHRESULTというのが決まりとなっており、HRESULTの場合は成功失敗とその付加情報を返すだけとなっています。 利用する側は、C++ですとFAILEDマクロ、SUCCEEDマクロで成否を判断します。(付加情報があるため単純な比較だとだめなため) ただ、これだと使い勝手が悪く不便なので、retvalという属性をつけることで、戻り値として扱う値だよという指示をつけてあげます。 VBですと、HRESULTの戻り値がトラップ可能なエラーで、retvalで返される値がメソッドの戻り値というように、読み替えられて扱われます。 VC++で、#importを使ってCOMを使用する場合も、VBと同様な使用方法(retvalを戻り値として扱う)も可能です。

sha-girl
質問者

お礼

丁寧にご説明頂き有難うございます。 大変参考になりました。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

うーん、サイトはどこもいまいちですねぇ。 ウィザードの使い方くらいは書いてありますが、本格的なところはあんまり・・・ ATL プログラミング なんてキーワードでgoogleといくつかは出てきますが、 どこもそれなり。 本ですとこちらが良いかと。 http://www.amazon.co.jp/exec/obidos/ASIN/4797306890/250-8739957-3629021 http://www.seshop.com/detail.asp?pid=35 私は上のほうのを持っています。もう絶版ですね。 最近は.NETに押されぎみでCOM関連はあまりいい書籍は見当たりませんね。 >「com化しておくと便利」とか聞くのですが いまいちピンときません。 COMの一番のメリットは、どの言語で作成したCOMオブジェクトも、使う側は作成言語を意識せずに使用可能ということですね。 ASPやVBScript等のスクリプトからも使用可能です。 これは、コンポーネントからの機能の公開の仕方、機能の利用方法がバイナリレベルで厳格に決められているからです。 >DLLとは何が違うのでしょうか? 通常のDLLの場合、公開されるのは関数単位ですが、COMの場合はオブジェクト単位になります。 また、COMの場合、DLLである必要がありません。 EXEでもかまいません。 さらに、コンポーネントが別のPCにおかれていても使用することができます。(これがDCOMになります) >com,ATL,ActiveXについて、関連があると思うのですが >その関連についても分かり易くご教授頂ければ幸いです。 COMという言葉自体は、メカニズムそのものをさします。 ActiveXやオートメーションと呼ばれる機能の基本技術です。 ATLはCOMコンポーネントを作るための、テンプレートを使用したC++のフレームワークです。 ActiveXは、COMを使用した技術の総称です。 ActiveXコントロール、ActiveX DLL、ActiveX EXE等があります。

sha-girl
質問者

お礼

taka_tetsu様ご回答ありがとうございます。 >ActiveXコントロール、ActiveX DLL、ActiveX EXE等があります。 確認したいのですが、 ATLで使うものはレジストリに登録する必要があるのですよね? com(ATL)の場合のEXEとDLLの違いってなんでしょうか?(3種類あるみたいですが) EXEの場合、レジストリ登録が必要なく返値が得られない.. でしょうか。 http://www.erde.co.jp/~katsu/com/02.html をみているのですが このreturn S_OKは [out,retval] VARIANT *pVal で指定した pValを返しているのでしょうか? しかしこのretvalがよくわかりません。 MSDNでみるとretval:メンバの戻り値を受け取るパラメータを指定します。 となっているのですが。 質問が多岐に渡りますが、もしよければご回答お願いします。

関連するQ&A

  • Visual Studio .NET C# でDLLを作成し、VB.N

    Visual Studio .NET C# でDLLを作成し、VB.NETで呼び出す初心者向けのサンプルについて  現在、Visusal Studio .NET C#でDLLを作成して、それを、VisualBasic.NETのWindowsアプリケーションで呼び出す簡単なプログラムを作成したいと思っているのですが、書籍をあたってもなかなか参考になる書籍がみつけられなく、サンプルのサイト又は、自分でそのようなプログラムを作成している人にぜひご教授願いたく、質問させていただきました。当方、初心者ですので、何卒宜しくお願いいたします。

  • 【ActiveX】CABファイル作成時のINFファイルについて

    ActiveXコントロールをCABファイルでINFファイルを定義しました。 そのINFファイルについて質問です。 http://www.ki.rim.or.jp/~kuro/ActiveX/CabAndSign/MakeCab.html 上記サイトを参考にさせて頂いたのですが、 その中の"atl.dll"は何の役割を持ったファイルなのか? また、必要なのか? をご教授頂けますか。 宜しくお願い致します。

  • COMについて

    VisualC++.netでCOMを作成する場合 基本的にMFCかATLベースになるわけですよね? 両者、違いがあるとするとなんでしょうか? 新規にCOMを作成するならMFCよりATLでしょうか? COMについて全く知識がありません。。 何故COMにするのか、COMにするメリット、デメリットはなんなのか等 メリットとして色々な言語から呼び出せる。 デメリットとしてレジストリに登録する必要がある。 といったところでしょうか? 宜しくお願い致します。 またCOMについてお勧めの書籍やサイトがあったら教えてください。

  • WIN32API CreateFileのCOMx

    WIN32API CreateFile(…"COMx"…)のCOM番号「x」)は、1~256まで可能ですか。 MS-VC++でRS-232C通信のWIN32アプリケーションを作る必要が生じてきました。 VC++6.0やVS2005のシステムは所有していますが、WIN32アプリは初心者です。 (WIN32アプリが出来たらDLLに改造するつもりです。) http://www.saluteweb.net/~oss_winapi232.html ここにどなたかが、サンプルプログラムをアップされてます。 この中の("COM1")は、"COM1"~"COM256"まで、対応しているんでしょうか。

  • COMについて

    ATL COM AppWizardを使用し、簡単なメソッドを追加し、DLLは作成できたのですが、ASPから実行した後、サーバー上にある作成したDLLを削除できません。 メモリーを開放するプログラムを追加する必要があるのでしょうか?それとも他に何か方法があるのでしょうか?

  • パソコン用語、色々と分からなくなりました

    お世話になっております。 PC用語が煩雑的になってきました。 一度認識確認をさせていただきたいです。 COM:現在はActiveXという名前になった。パソコンの内部に入れておくことによって必要な時にメモリ上にプログラム部品を使うことによってアプリケーションの開発を容易にするもの。COMはクラス OLE:COMと同じだが、通信を通じてプログラム部品を使う。パソコンの内部に入れない。OLEはクラス。拡張子がocxなので、ocxと呼ばれることがある。 DLL:COMと同じ。 PECL:C言語で作ったPHPを拡張するためのモジュール。モジュールなのでクラスとは異なる、つまりインスタンス化することができない。 ライブラリ:クラス群の総称。つまりCOM,OLE,DLLはライブラリ。 以上の認識で間違いないでしょうか。 ご教授お願いいたします。

  • COMプログラミングに良い書籍

    Win2000Pro、VC++6.0とMFCで普段はアプリを作っています。 今度から、ライブラリをCOMコンポーネントで作成して提供する ことになりました。COMプログラミングの理解に向いている と思われる書籍があれば教えてください。本屋にいっても、 ATLの使い方やDCOMの話が中心のようです。 普通のプログラミングとどこが違うのかをわかるようなものが あればベストです。よろしくお願いいたします。

  • COM相互運用機能のON,OFFによるDLLの差異

    Visual Studio 2010で、VB.NETのクラスライブラリを作成して、.NETとCOMの両方で使用しているのですが以下のことがよく分かりませんので教えてください。 同じプロジェクトのDLLファイルをVB.NETなどから.NET用のDLLとして使っているだけでなく、VBAなどからもCOM用のDLLとして使っているのですが、プログラムに変更があると、COM相互運用機能の登録がONの場合とOFFの場合の両方で2回ビルドして各々のDLLファイルを別に用意して使い分けていました。しかし、先日、COM相互運用機能の登録をONにしてビルドしたDLLでもVB.NETなどから.NET用のDLLとして参照できてしまうことが分かりました。.NET用のDLLとして利用する場合には、COM相互運用機能の登録をON,OFFに関係なくどちらでビルドしたDLLファイルでも使用できるのでしょうか。たまたま今は参照できているだけで将来的には使えなくなる可能性があるので、.NET用のDLLとして使用する場合には、COM相互運用機能の登録をOFFにしてビルドしたDLLを使用するべきなのかがよく分かりません。つまり、下記の(A)と(B)のどちらが正しいのかがよく分かりませんので教えてください。 (A) VB.NETとして使用する場合には、COM相互運用機能の登録をON,OFFに関係なく、どちらでビルドしたDLLファイルでも使用できるが、COMとして利用する場合には、COM相互運用機能の登録をONにして、ビルドして作成したDLLファイル(.dll)とタイプ ライブラリ ファイル(.blt)を使用する。VB.NETとしてもCOMとしても利用する場合には、COM相互運用機能の登録をONの方だけビルドすればよい。 (B) VB.NETとして利用する場合には、COM相互運用機能の登録をOFFしてビルドしたDLLを使用する。COMとして利用する場合には、COM相互運用機能の登録をONにしてビルドして作成したDLLファイル(.dll)とタイプ ライブラリ ファイル(.blt)を使用する。VB.NETとしてもCOMとしても利用する場合には、COM相互運用機能の登録をON,OFFの両方で2度ビルドする必要がある。 なお、(A)が正しい場合にのみ、分かる範囲でいいので教えてほしいのですが、 コードを何も変更しないでビルドしてもDLLファイル(.dll)は更新されませんが、COM相互運用機能の登録のONとOFFを変更するだけでDLLファイル(.dll)は更新されています。COM相互運用機能の登録をONにしてビルドして作成されたDLLファイル(.dll)は、COM相互運用機能の登録をOFFにしてビルドして作成されたDLLファイル(.dll)と何が異なるのでしょうか。 よろしくお願いします。

  • C言語の基礎を勉強したいのですが。。。

    今C言語を独学で勉強しようとしています。 参考書や書籍を色々見て、試行錯誤してい いるのですが、イマイチ”ピン”ときません。 と言うよりは、C言語の分野自体に向いていない、 理解してないといったほうが正しいのかもしれません。 根本的に勉強したく、都合良すぎかもしれませんが、 関連のサイトやおすすめの本などありましたら是非 教えて下さい。簡単なプログラム自体あれば、参考に 記述頂けると幸いです。よろしくお願いします。

  • デスクトップ画面をpng形式で保存する

    こんにちは、開発環境:VS2005, 言語:VC++, ATLプロジェクトにて プログラムを作成しています。ActiveXとして使用予定です。 C++ はまったくの初心者です。 いろいろ調べつつ、Bitmap形式での出力は成功しました。 が、やはりファイルサイズが大きいので、できればpngで出力したいと考えています。今のBitmapでの出力プログラムからはpng出力に変更できないみたいです(?) 参考サイトや方法をご存知の方おられましたら、宜しくお願いします。

専門家に質問してみよう