COM

■ このスレッドは過去ログ倉庫に格納されています
1IUnkonwn
垢版 |
2007/01/10(水) 20:13:15
いざ語れや
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#だよね〜
120デフォルトの名無しさん
垢版 |
2007/10/01(月) 13:13:07
ぽとぺた環境のことか?
2007/10/24(水) 14:50:19
どとねと環境のことだろう
122デフォルトの名無しさん
垢版 |
2007/10/31(水) 06:53:00
getUnk(&pUnk1);
getUnk(&pUnk2);
getUnk(&pUnk3);
123デフォルトの名無しさん
垢版 |
2007/11/03(土) 15:41:50
pUnkOut->release();
2007/11/03(土) 19:23:29
IUnko
2007/11/05(月) 19:49:15
eco->recycle(unko);
2007/11/05(月) 21:55:35
シェルがCOMをまったく使わなくなる日が来たりするのだろうか
2007/11/05(月) 23:14:29
果たしてそれはWindowsなのだろうか。
2007/11/06(火) 01:23:31
果たしてWindowsのそれはシェルなのだろうか
2007/11/11(日) 22:25:40
IThumbnailCache ってどこから手繰りよせたらいいのん?
IThumbnailProviderからもってくるとキャッシュみないよね?
130129
垢版 |
2007/11/12(月) 00:26:45
>IThumbnailProviderからもってくるとキャッシュみないよね?

IShellItem.BindToHandler経由でIThumbnailProviderからサムネールもってくるとキャッシュみないよね?
131129
垢版 |
2007/11/12(月) 02:14:14
自己解決しますた
LocalThumbnailCacheでnewしてやればいいのね
ほんとのところCOMを理解してないけど

キャッシュ見るようになって動画のサムネイル早っ
2007/11/13(火) 23:58:24
先週からVisualStudio2005でCOM/ATLの開発始めたCOM初心者なんだけど、
おっそろしい程に参考になる本とかWEBページとか少ないな

ボチボチ進んでるから、なんとかなるとは思うけど、自力で探るのはめんどい
2007/11/16(金) 02:04:59
Essential COMの第一章はPDFになってて結構参考になった
134129
垢版 |
2007/11/16(金) 02:13:11
>>133
kwsk
2007/11/16(金) 02:16:20
>>134
http://www.ascii.co.jp/pb/bookmart/pdf/47561/4756130666.pdf
直接の役には全然役に立たないよ
でもこれ読む前はなんでCOMがこんなことになってるのか全然わかんなかった
2007/11/16(金) 02:28:35
>>135
ありがとう。
読んでみる。
2007/11/17(土) 02:14:16
レジストリを使わないCOMがあったら便利だなぁと、そう思った
マニフェスト的なものをヘッダに持って
どう実現するかは知らんけど
2007/11/17(土) 03:36:51
>>137
XP以降ならマニフェストでサイドバイサイドできるよ。
2007/11/21(水) 00:20:03
解放忘れのチェックの仕方とエラー処理の書き方がわからんなあ
2007/11/21(水) 00:48:55
CComPtr
_com_ptr_t
2007/11/22(木) 00:08:27
>>137
海外のライブラリでそれできるやつあるよ
2007/11/23(金) 01:44:45
Registration-Free COM

ttp://www.ailight.jp/blog/sha256/archive/2005/03/29/5437.aspx
2007/12/02(日) 02:36:38
翔泳社の「ATL COMプログラミング」でCOMの勉強を始めたのですが、
VisualStudio2005でATLの「実行可能サーバー」を生成すると
ソースが書籍のサンプルと全然対応しなくて困っております

今の開発環境でCOMの学習用にいい書籍とかありますでしょうか?
2007/12/02(日) 02:49:08
ATL Internals: Working with ATL 8 (2nd Edition)
by Christopher Tavares, Kirk Fertitta, Brent Rector and Chris Sells

とかは2006年だ読んだこと無いけど
2007/12/02(日) 17:22:28
>>143
前に日本語でその手の本を探したけど、結局、見つからなかった。
真面目にサンプル作って解説本でも書いたら売れるかな。
売れないだろうな・・・・
2007/12/02(日) 18:08:07
>>143
俺もその本持ってるけど、COM/ATLの根本的なところは大して変わらないんだし、ATLの側でも
互換性のためATL3.0用のクラス残してるし、それで勉強してみたら?
C++属性なんて最後でいいと思うし、ATL8.0の部分だってATL3.0判ればそう難しくはないんじゃないか?
2007/12/03(月) 00:38:06
>>144-146
皆様ご意見ありがとうございます。
少なくとも日本語の書籍に新しいものはなさそうですね。
英語の本は時間が許せば…と思いますがやはり敷居が高いです。

>>146さんの言うとおりもう少し現状の環境で書籍の内容を確認してみます。
2007/12/05(水) 01:36:09
別環境のVisualC++6.0でATLのプロジェクトを生成し、それを使って演習…
149デフォルトの名無しさん
垢版 |
2007/12/14(金) 22:18:03
IDropTarget/IDropTargetHelperを実装したクラスのウィンドウで
ドラッグドロップをしています。

そのウィンドウ上にマウスカーソルがあるときに他のウィンドウを非アクティブのまま
表示するようにしたいんですが、ウィンドウを表示すると元のウィンドウの下に
ドラッグイメージが隠れてしまいます。
(後から表示したいウィンドウもIDropTarget/IDropTargetHelperを実装してます。そっち上では
ドラッグイメージは隠れません)

ドラッグイメージのZOrderをなんとかしたいわけですが、
ヒント等ご存知の方いらしたら教えてくんなましょ
2007/12/15(土) 01:59:23
そのウィンドウと他のウィンドウと元のウィンドウと後から表示したいウィンドウが
どのウィンドウなのかわかんないのでAとかBとか名前付けて書いてくれると嬉しい
2007/12/15(土) 11:39:46
すんません

すべてのウィンドウ: IDropTarget
 ・IDropTargetHelperをもってる
 ・擬似メニューみたいな感じで、擬似サブメニューみたいなウィンドウがポップアップする

A上にドラッグ、A上にドラッグイメージ出る

A上のサブメニューが展開してBを表示( AのDragOverでWM_MOUSEMOVEをA自身にsend。これが原因? )

マウスはA上にあるけど、ドラッグイメージはAの下に隠れてしまう

B上にドラッグ、B上にドラッグイメージが出る

B上のサブメニューが展開してCを表示( BのDragOverでWM_MOUSEMOVEをB自身にsend。これが原因? )

マウスはB上にあるけど、ドラッグイメージはBの下に隠れてしまう
(以下繰り返し)

IDropTargetHelper使わないと正常なんで、諦めるかも……
2007/12/20(木) 16:43:05
mpeg compass.jp
名古屋駅近辺でお話しましょう
2007/12/20(木) 23:05:18
COM初心者です。

CLSCTX_INPROC_SERVERを渡したCoCreateInstanceは
1つのプロセス内に1つのインスタンスを作成するみたいですが、

1つのプロセス内の複数のスレッドでひとつのIIDで指定されたインスタンスを
スレッドごとに作成したいときはどうしたらいいのでしょう。

もしかしてIIDごとに何個つくれるとか決まってたりするんでしょうか
2007/12/20(木) 23:14:33
各スレッドでCoCreateInstanceを呼べばいい。
2007/12/28(金) 13:03:07
Win32スレから誘導されてきますた

IExtractImageを実装したんだけど、2000で動かすと時々フォルダ内の全ファイルに同じ
サムネイルが出るようになる不具合はどう対処したらいいんでしょう。
MSDNのサンプル実装で起きるし、フラグ類いろいろ変えたりマルチスレッド対応にしたり
しても改善せず・・・
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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