COM

■ このスレッドは過去ログ倉庫に格納されています
1IUnkonwn
垢版 |
2007/01/10(水) 20:13:15
いざ語れや
2007/01/16(火) 19:47:43
検索できねー
2007/01/16(火) 19:52:11
>>14
Windowsの枠組み内でしか生きられないメジャーだがローカルな技術としてな。。。

>>16
>他のプラットフォーム上のコンポーネントとの相互運用性も提供します。
だから、これが上手くいかなかったんだよ!
知ったかは氏ね
2007/01/16(火) 20:07:52
怒りっぽい人ですね
22デフォルトの名無しさん
垢版 |
2007/01/16(火) 20:10:14
16はすぐ詐偽に引っかかるタイプ
23デフォルトの名無しさん
垢版 |
2007/01/16(火) 20:12:17
>>16 は単に MS のページか
どっかの解説サイトからとってきただけなんじゃないの
2007/01/16(火) 20:21:00
COMを理解するために必死でC++の仕様を勉強した時期がありました。
嫌な思い出です。
2007/01/16(火) 20:54:51
OpenVMS
http://h71000.www7.hp.com/openvms/products/dcom/

Solaris
http://www.softpanorama.org/Net/Application_layer/rpc.shtml

EntireX DCOM for LINUX
http://www.softwareag.com/jp/products/entirex/downloads/download_exxdcom.asp

Free DCE and DCOM
http://sourceforge.net/projects/freedce

J-Interop
http://j-interop.sourceforge.net
2007/01/16(火) 21:02:02
>>5年持ったためしがないんだもの・・・・

COMもOLEも、もうすぐ20歳ですが?
27デフォルトの名無しさん
垢版 |
2007/01/16(火) 21:50:47
OLEの定義自体が、過去に二回もコロリと変わってる。
OLE1.0時代は、ただその略名通り(異アプリ間のデータ交換)の技術だったのが
OLE2.0時代(COM誕生)には、一つのアーキテクチャの総称だと突如宣言してる。
しかし、ActiveXの誕生と共に「やっぱりただのLink&Embedでした」とまた変えてる。
あまりに節操がない、と言うかエンジニアを舐めてる
28デフォルトの名無しさん
垢版 |
2007/01/16(火) 22:02:54
アパートメントからしてよく分からん。
結局STAでも、他のスレッドからアクセスしていいんだよな。
単に、プロキシ・スタブを介するからMTAに比べると
性能が若干落ちるってことだよな??
2007/01/16(火) 22:52:16
DirectXもCOM
2007/01/16(火) 22:53:09
その代わり排他制御をしなくて済む(プロキシ・スタブがメソッド呼出をキューイングするため)という利点がある。
2007/01/16(火) 23:01:30
その代わり、Read Writeパターンが使えないのでサーバーパフォーマンスが
大幅に落ちるという欠点もある
2007/01/17(水) 17:04:18
ActiveX 〜犠牲者たち〜
33デフォルトの名無しさん
垢版 |
2007/01/17(水) 22:48:58
>>31
read write パターンって何ですか?
COMは情報が少なくて困る
2007/01/17(水) 22:58:26
名前までわかってるんだから検索しろよ
つーか名前を付けたことがデザインパターンの最大の功績と言っても過言ではない
35デフォルトの名無しさん
垢版 |
2007/01/18(木) 00:03:23
なんだデザインパターンか
36デフォルトの名無しさん
垢版 |
2007/01/18(木) 05:00:46
>>35
こーゆーのがエンジニアかと思うと、なんか情けなくなってくるね
2007/01/18(木) 22:50:08
Java SwingとOLEとCORBA(にGUIコンポってあるの?)をJava上で手間なくリンクしたい。
ちょうどIEコンポーネントみたいな感じでOS毎の似たような部品を再利用したいんだ。
38デフォルトの名無しさん
垢版 |
2007/01/18(木) 23:03:05
>>36
なんなんだえらそうに
デザパタ厨かよwwww
2007/01/19(金) 07:07:41

ネーミングパターン

こきおろしパターン

ぐぐれパターン

話題逸らしパターン

40デフォルトの名無しさん
垢版 |
2007/01/22(月) 18:43:51
過疎
41デフォルトの名無しさん
垢版 |
2007/01/31(水) 13:09:50
CON
2007/01/31(水) 13:46:23
OCN
43デフォルトの名無しさん
垢版 |
2007/03/09(金) 16:56:26
IE用のツールバー作ろうとして、
IDeskBandを継承したクラスのSetSiteで
パラメータからQueryInterfaceでIID_IOleWindowを
取得しようとしたんだが
E_NOINTERFACEエラーが出る。
なんか心当たりある方いらっしゃいませんか?
44デフォルトの名無しさん
垢版 |
2007/03/09(金) 22:46:43
もしかしてIE7なのが原因?
開発環境はVS2005です。
2007/03/09(金) 22:54:14
どっと混む
2007/03/10(土) 00:35:59
下手なシャレはよしなしゃれ
2007/03/10(土) 01:27:30
>>43
IOleWindowって自分自身じゃね?
2007/03/10(土) 10:47:13
>>47
http://idm.s9.xrea.com/ratio/2004/06/17/000104.html
ここに

>ツールバーがactivateされるとき、 IObjectWithSite#SetSite が呼ばれる。
>パラメータのIUnknownインターフェースは、IOleWIndowをquery可能なので、
>これを使ってツールバーの親となるウィンドウの情報を取得する。
>MSDNのサンプルでは、このタイミングでツールバー本体のウィンドウを生成している。

ってあって、MSDNでもそうなってたんだが。
2007/03/10(土) 15:34:41
>>48
IOleWindowとれたよ
親のReBar32WindowのハンドルもGetWindowで正しくとれてる。

Vistaだけども。
2007/03/10(土) 19:28:49
なんでだろ・・・
解決したら報告します。
51デフォルトの名無しさん
垢版 |
2007/04/13(金) 18:44:41
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCΟMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOMage
2007/04/16(月) 19:50:58
ATLの属性をつかってテキストで簡単にCOMを作るチュートリアルやってみたが、
あれATL7.0じゃないと動かねーじゃねぇか
53デフォルトの名無しさん
垢版 |
2007/04/25(水) 18:19:04
ネットの情報だけでCOMサーバを勉強するのって無理ある?

MFCでコントロール作ってそれをコンテナに組入れるのはやったことあるけど
ATLで見えないWinsock+COMサーバ.exeに挑戦中でCOMとソケット通信をどのように
連携すればいいのかで色々悩んだ。
結局ウィンドウメッセージとグローバル変数を駆使してなんとか目処がついた
けど、もっとスマートなやり方が載ってる参考書はないんでしょうか?
2007/04/26(木) 12:40:13
>>53
ウィンドウを持たないCOMオブジェクトで、Winsockの非同期やるんなら、イベント使った方が
良いと思う。
5553
垢版 |
2007/04/26(木) 18:32:04
>>54
ありがとう。
>イベント使った方が良いと思う。
のイベントとはウィンドウメッセージとの理解でよいですか?

もう一点教えていただきたいことがあるのですが、
ブラウザに貼り付けたコントロール(ocx)からATLで作ったCOMサーバ.exeに
Dispatchしてメソッドを呼ぶことができたのですが、
ブラウザを閉じるとCOMサーバ.exeも終了してしまいます。
ブラウザを閉じてもCOMサーバ.exeを常駐させたいのですが
クライアント側/サーバ側どちらで対応すればよいのかさえ検討がつきません
どのようにすればよいかご存知でしょうか?
2007/04/26(木) 19:14:00
よくない。WSAEventSelect使えって話でそ。
5753
垢版 |
2007/04/26(木) 23:21:36
>>56さん 了解です。

引続き>>55についてご存知の方お力を貸してください。
お願いします。
2007/04/27(金) 10:49:59
DLLに汁
2007/04/28(土) 18:07:15
DCOMの実装に関する参考書や参考サイト知りませんか?
60デフォルトの名無しさん
垢版 |
2007/04/28(土) 18:31:14
↑クライアントとサーバ両方の実装についてです。
言語は問わないのですが、できればVCについてお願いします。
2007/04/29(日) 02:27:45
>>51
なにぃっ、Mageだと!?貴様鉄道板住人だな!
62デフォルトの名無しさん
垢版 |
2007/05/03(木) 12:01:20
COMスレってなんでこんなに過疎ってるの?
それについて議論しよう
2007/05/03(木) 12:01:47
ネットでCOMについて記述してるサイトもあんま見ない
2007/05/03(木) 12:35:53
COMに比べると似たようなことはドトネトの方が簡単にできるから
もう存在意義がなくなってんじゃないの?
2007/05/03(木) 12:38:08
COMを使う舞台がエクセルVBAなんかに移ってるからな
2007/05/04(金) 00:28:42
なんで?comサーバでの利用機会とか無いの?
アプリ間でデータ交換とか外部アプリへの機能提供とかの場面で利用価値あると思うけど

まあ、代替手段は色々あるし、わざわざムズい技術を覚えてまでcomを利用する必要もないか
特に開発人口が多い業務系開発だったら尚更だな
2007/05/04(金) 00:43:47
業務系ならなおさら何でもエクセルでやりたがる
もしくはCOBOL
2007/05/04(金) 14:13:48
PlatformSDKにもMIDLはあることだしSxSアセンブリでのCOMならいくらかハードルも低いし、C++での共有ライブラリ作成という観点でもう少しひろまってもいい気がするんだけどな。
ActiveXでもOLEでもなくDLL+αとしてのCOMっていう観点でさ。

なんにしてもMFCやATLで新しくコンポーネント作るってのはなくなっていくんだろうな。せいぜいVB6でか.NETアセンブリからタイプライブラリ作る位になるのか。
69デフォルトの名無しさん
垢版 |
2007/05/07(月) 18:10:27
ATLでアウトプロセスサーバを作っているのですが、

親ウィンドウのメッセージループから自exe内のCOMオブジェクトを
どのように参照すればよいかわかりません。
マクロで展開されたポインタがどこかにあると思うのですが
どのように参照すればよいでしょうか?

ATL初心者なので質問の表現がおかしいかも知れませんが
よろしくお願いします。
7069
垢版 |
2007/05/07(月) 19:26:22
デバッガで見てみたら
Choge *a=(Choge*)&ObjectMap[n];
で参照できました。
で、いいですか? ←直感的にやったらできたので不安ですが・・・
2007/05/08(火) 03:09:34
いいよ〜いいよ〜いいよ〜
72デフォルトの名無しさん
垢版 |
2007/05/08(火) 12:19:59
もー。ATLイベントの実装の仕方がいまいちわからん。
2007/05/08(火) 12:45:22
イベント出す側だったらウィザードが殆どやってくれるからあまり意識したことないけど?
74デフォルトの名無しさん
垢版 |
2007/05/08(火) 13:32:57
イベント出す側なんですが、
クラスビューからメソッドと接続ポイントを追加したんですが
xxxxx.idlとxxxxxCP.hに空のクラスを作るだけで
メソッドの雛形作ってくれないんですよ。

最初のウィザードのときシンプルオブジェクトで作成してるからでしょうか?
2007/05/08(火) 13:42:03
ATLシンプルオブジェクトを追加するとき"接続ポイント"にチェックいれて作れば
クラスビューに IHoge と Libの下に _IHogeEvents が出来ているでしょ
イベントメソッド追加したければ _IHogeEventsで右クリック - メソッド追加で追加できるよ

メソッド追加した後、実装クラス (CHoge) の方で右クリック - 接続ポイントの追加をもう一回
やるのを忘れんな
76デフォルトの名無しさん
垢版 |
2007/05/08(火) 14:49:43
で、できました。
>接続ポイントの追加をもう一回やるのを忘れんな
もう一回やったらできました・・・なぜもう一回なのかわかりませんか゛
とにかく今日一日試行錯誤していたのが「もう一回」のキーワードで解決しました。

>>75さんになにかごちそうしたい気持ちでいっぱいです。
2007/05/08(火) 16:24:46
極稀に2chも役に立ったり立たなかったりする
78デフォルトの名無しさん
垢版 |
2007/05/08(火) 17:48:04
もう一役お願いします。

イベントを作成したのですが、イベントがクライアントに届きません。
Fire_Hogeを呼びだすときデバッガで追ったら
int nConnections = m_vec.GetSize(); で0が帰ってきて
その下のループの中のpDispatch->Invokeまでいきません。

ソフトの構成としてはアウトプロセスサーバ.exeからブラウザのjavascriptへイベントを発生したいのですが、上記の通りとなり、イベントを渡すことができませんでした。
m_vecが接続を管理するらしいのですが、javascriptからの接続がうまくないのでしょうか?
接続の方法としては<OBJECT>タグにCLSIDを埋め込むようにしてjavascriptでサーバ.exeのメソッドを呼び出すことは成功しています。
2007/05/08(火) 18:41:37
javascriptからEventをAdviseしてあげた?
2007/05/08(火) 20:21:50
>>78
Fire_Hoge()の呼び出しってどうやってます?
多分IHogeの実装クラスCHogeのインスタンスから呼び出してると思いますが、

COMクライアントが作ったCHogeインスタンスから呼ばないとFireできないっす
8180
垢版 |
2007/05/08(火) 20:30:56
補足:

インターフェースをシングルトンにしとけば作成されるインスタンスは必ず一つなので、
いっそシングルトンにしてしまうとか

つ DECLARE_CLASSFACTORY_SINGLETON

ただこれをやると以下の問題も・・・

http://support.microsoft.com/kb/198834/ja

後は泥臭いやり方しか知らない
2007/05/08(火) 21:07:42
こんな感じなんですが・・・ EventをAdviseとはどのようなことをするのでしょうか?
<SCRIPT language="javascript" for="HogeID" event="HogeEvents(a, b)">
   alert(a);
</SCRIPT>
<OBJECT ID="HogeID" CLASSID="CLSID:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
</OBJECT>

Adviseをお願いします。
83デフォルトの名無しさん
垢版 |
2007/05/08(火) 21:08:40
>>80のアンカー間違えました。>>79が正解です
84デフォルトの名無しさん
垢版 |
2007/05/08(火) 21:14:49
>>82>>79に対するレスです。
>>83は誤爆です。

>>80,81
ありがとうございます。
参考にさせていただき再び試行錯誤させていただきます。
2007/05/08(火) 21:21:59
>>80
書き忘れましたが、Fire_Hoge()の呼び出しはは
ブラウザ(HTMLに記述したjavascript)からCHoge.exeのメソッドを呼び出して
呼び出されたメソッドの中でFire_Hoge()を呼んでいます。
86デフォルトの名無しさん
垢版 |
2007/06/11(月) 15:36:03
質問させてください。
アウトプロセスサーバで
クライアントから呼出して配列データ(BSTR)を取得するメソッドを作成しています。
このときサーバ側ではSafeArrayCreate()でクライアントに渡す
配列データを作成しますが、この配列データはSafeArrayDestroy()で
解放する必要はないであってますか?

根拠としてメソッド内で解放するとクライアントに渡せない。
デバッガで確認したところSafeArrayCreate()のポインタをstaticで保持して
次にメソッドを呼び出したら、ポインタが指しているメモリが壊れていた
(=勝手に解放してくれた)。
ということからこのような結論に至ったのですが、間違ってないでしょうか?
2007/06/11(月) 15:52:36
解放しない。解放したら返せないからね。

今回outprocだから、正確にはマーシャラーが適当にシリアライズしたのち
解放してくれるのでユーザのコードでは(inprocの場合と同様)解放しなくて良い、
というような動作。

逆に「取得した側」は自分で解放する。
88デフォルトの名無しさん
垢版 |
2007/06/11(月) 16:04:00
>>87
すばやいレスありがとうございます。

さらに詳しいCOMの内情まで教えていただきまして勉強になりました。
感謝いたします。
89デフォルトの名無しさん
垢版 |
2007/07/08(日) 15:55:55
COMについての入門書がありましたら、紹介してくれないでしょうか?
なにせ情報や サンプルがなかなか見当たらないので
2007/07/09(月) 09:14:09
ttp://www.amazon.co.jp/exec/obidos/ASIN/4881356992
これはまぁわかりやすい方。
91デフォルトの名無しさん
垢版 |
2007/07/10(火) 20:39:52
わかりやすくなくていいからIEが作れるぐらい
詳しい本は?
2007/07/11(水) 09:08:04
IEってかIEコンポ使ってのタブブラウザみたいなの?
それなら>>90の本とMSDN。
IEコンポ専門に突っ込んで書いてる本はないとおもう。
英語のMSDN読みまくる根性ないと無理。
2007/07/11(水) 20:47:11
いや、IEコンポを使うんじゃなくて、IEコンポ自体を作りたい。
IWebBrowser2を実装して、ActiveXコントロールをホストしたい。
2007/07/11(水) 22:03:14
IEコンポ自体を作りたいなら止めはしないが、MSは他人に実装させるつもりはないはず。
http://msdn2.microsoft.com/en-US/library/aa752127.aspx
> Custom Implementation No

ActiveXコントロールをホストしたいだけならIWebBrowser2を実装する必要は無いぞ。
2007/07/11(水) 23:27:02
mozillaにIWebBroser2の互換インターフェースが存在したような、
2007/07/12(木) 00:21:14
>>94
ぬあー、そうなのか。

>>95
Mozillaのコード見たけど、想像以上に整然としてて驚いた。
9790
垢版 |
2007/07/12(木) 11:31:55
>>93
だったらATLインターナルがいいかも。
98デフォルトの名無しさん
垢版 |
2007/07/15(日) 21:24:58
古きCOM書籍
興味がある方は、復刊リクエストご協力ください

Inside COM
ttp://www.fukkan.com/fk/VoteDetail?no=20887

Essential COM
ttp://www.fukkan.com/fk/VoteDetail?no=38742
2007/07/16(月) 07:43:51
3層アプリでビジネスロジックを
ドメインオブジェクトとして他のマシンに置きたいとき
COMならCOM+が使えるじゃないですか。
.NETだと何を使えばいいのでしょう?

Web Serviceだとサーバ側にインスタンスを作って
継続的に使用できないですよね。
となると.NET Remotingかな。
2007/07/16(月) 08:53:34
>>99
System.EnterpriseServices でCOM+
10199
垢版 |
2007/07/16(月) 11:31:25
>>100
なるほど!
結局はCOM+ですか。
.NetはCOMをうまく内包しているんですね。
ということは、「.NetになったらCOMは必要ない」
という意見は的外れなんですね。
2007/07/16(月) 15:54:41
COM+はやめたほうがいいんじゃないか?
2007/07/16(月) 21:18:15
>>101
CLR自身がCOMで実装されてるのに、誰だよそんなこと言った奴は。
2007/08/15(水) 00:05:12
現在どのプロセスがどのCOMコンポーネントを使っているか
知る方法はないでしょうか?
2007/08/17(金) 01:49:01
CoCreateInstanceなんかをHOOKしとけば、判るんじゃない?
(直接DLLからインスタンスを生成する方法がないわけじゃないけど)
2007/08/20(月) 22:00:05
COMが流行のキーワードでなくなり、.NETは使いものにならない
ということで、プログラミング環境は90年代前半に戻りつつあるよね。
ホビープログラマとしてはプログラムなんて動けばなんでもいいし。
2007/08/21(火) 08:37:59
確かにC++のシェアが下がったと思ったら、組み込みでC++再来みたいな。
2007/08/21(火) 19:01:55
ウェブプログラミングに飽きて、.NETも何かいまひとつ、そしてC++に戻ってきた。
2007/08/22(水) 22:17:32
COMでは参照カウンタが0になるとすぐに解放されることは
保証されているんでしょうか?
2007/08/24(金) 13:49:34
インターフェイスは参照カウンタ0で開放する規約になっている。
なってない場合バグ。その辺のロジックはATLとかがサポートしてて
直接コーディングすることは少ないから普通は大丈夫。
アウトプロセスの複合サーバーの場合は、
インターフェイスが開放されてもプロセスが終了しないものがある。
WordやExcelがその例。
2007/08/24(金) 14:44:18
IISでASPからActiveX DLLを使った時、ASPでSet obj = Nothing
してもDLLがロックされたままになるのは別の問題ですかね?
112デフォルトの名無しさん
垢版 |
2007/08/26(日) 08:22:25
http://pc11.2ch.net/test/read.cgi/tech/1143171172/
2007/08/26(日) 12:43:19
・COMオブジェクトの参照カウンタが0になったときに、
 そのオブジェクトが消え去る

・あるDLLに属しているCOMオブジェクトの生存数が0
 になったときにそのDLLをアンロードしてほしい

この二つは全く別の話。
114デフォルトの名無しさん
垢版 |
2007/09/27(木) 10:42:39
奥深いよね〜COM
115デフォルトの名無しさん
垢版 |
2007/09/27(木) 16:33:32
>>107
どの分野でc++のシェアが下がったんだろう

業務系→cobol、j2ee
組み込み系→c、c++、asm
2007/09/27(木) 16:48:30
http://www.premiumtv.12gbfree.com/?X3/?STV=dvdmajestic+trailer+STAR+WARS
2007/09/27(木) 18:15:23
>>115
Windows のソフトでわずかだけれども C# が使われ始めているな。
以前ならMFCで書かれていたような奴が。

Sunが横やり入れなければ数年前にJ++で出来ていたことなのにねぇ・・・
2007/09/28(金) 04:52:55
組み込みでC#使ってるひといる?
119デフォルトの名無しさん
垢版 |
2007/10/01(月) 09:32:59
VB6の後継はC#だよね〜
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況