トップページ⇒tech
284コメント84KB

COM

■ このスレッドは過去ログ倉庫に格納されています
0001IUnkonwn2007/01/10(水) 20:13:15
いざ語れや
0002Iknow2007/01/10(水) 20:15:35
嫌だね。
0003デフォルトの名無しさん2007/01/10(水) 22:50:49
関連スレ
どうしてCOMは即死したのか
ttp://pc10.2ch.net/test/read.cgi/tech/1143171172/l50
【OLE】オートメーション総合スレ【ActiveX】
ttp://pc10.2ch.net/test/read.cgi/tech/1137771139/l50
一応
Win32API質問箱 Build48
ttp://pc10.2ch.net/test/read.cgi/tech/1166172047/l50
0004デフォルトの名無しさん2007/01/10(水) 23:01:55
何となく偉くなった気がする15の夜
0005デフォルトの名無しさん2007/01/10(水) 23:19:39
【ネガティブ派遣根性チェック】

3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。

□派遣先の社員の意見にはたとえ間違っていても反対しない
□派遣先から「いつまでもここで仕事してくださいね」と言われるようになりたい
□自社に仕事を持ち帰れるように言われるとムカつく
□自社で仕事なんてできるわけがない
□派遣/受託の差異を指摘する人間はムカつく
□派遣先には仕事だけでなく自分のプライベートについても指示して欲しい
□自分の月額金額を知らない
□派遣先社員より自分の生涯収入が低いのは当然だ
□派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ
□今のプロジェクトが終わっても同じ派遣先に常駐したい
0006デフォルトの名無しさん2007/01/11(木) 22:05:26
          ヽ / /⌒\
         /ヽヽ|/⌒\ii|\
       / /ヾゞ///\\|
       |/   |;;;;;;|/ハ \|
             |;;;;//⌒ヽ
             |;/( ^ω^) >>1おっおっおっ乙枯ー
.           |{ ∪  ∪
             |;;ヾ.,____,ノ
             |;;; |
             |;;;;;|
             |;;;;;|
0007デフォルトの名無しさん2007/01/12(金) 00:45:10
COMの本、死ぬの早すぎ
もうちょっと刷ればいいのに
0008デフォルトの名無しさん2007/01/16(火) 17:05:09
一通り仕組み頭に入れとけばそれ以上深い話があるでもなく
あとは使う部品のマニュアル嫁としかいえないからなw
0009デフォルトの名無しさん2007/01/16(火) 17:12:56
簡単に言えば、異なる言語間で共通に使用できるだけで、
異なる環境での使用が困難だったからw
(MS仕様のOSでないと使えない)
Javaの逆を狙って、見事に大ハズレしただけ

もうMSには、新技術を提起して欲しくない。
5年持ったためしがないんだもの・・・・
0010デフォルトの名無しさん2007/01/16(火) 18:00:56
COMは傑作なんだけど。馬鹿にはわからないのが残念でならない
0011デフォルトの名無しさん2007/01/16(火) 18:35:27
馬鹿にも分かるものこそが真の傑作だとは思わんか?
0012デフォルトの名無しさん2007/01/16(火) 18:52:52
comの基本概念は、次の.NETに受け継がれてるけど(当たり前の話だが)、
その設計の具体的要素(インターフェースの呼出設計など)のほとんどは
破棄されて受け継がれず、結局NETフレームワークの大部分は、
JavaVMを参考にして設計された。。。

>>10の様な知ったか馬鹿信者がいる限り、MSはまた独自のポンコツアーキテクチャを
世に送り出して、世界中のエンジニアを煙に巻く過ちを繰り返すだろう。
0013デフォルトの名無しさん2007/01/16(火) 19:08:51
>>12
.NETの有り様からするとCOMが素晴らしいということを言いたいのですね?
0014デフォルトの名無しさん2007/01/16(火) 19:22:44
>>9
COMは10年以上現役だろ
むしろ.NETのほうがヤバイ
0015デフォルトの名無しさん2007/01/16(火) 19:25:08
というかwindows自体がCOMの塊だろ。
winが続く限り生き残るだろ。
0016デフォルトの名無しさん2007/01/16(火) 19:34:37
>>9
無知乙

COM はMicrosoft Windows Distributed interNet Application (Windows DNA)アーキテクチャにコンポーネント テクノロジを提供し、
Web ベースとクライアント/サーバー アプリケーションを単一のアーキテクチャに統合することを可能にします。
COM を使用することにより、開発者は任意の言語で、任意のネットワークを介して相互作用できる分散コンポーネントを作成することができます。
COM は、Solaris、HP-UX、DEC UNIX、Siemens Nixdorf SINIX など、他のプラットフォーム上のコンポーネントとの相互運用性も提供します。
0017デフォルトの名無しさん2007/01/16(火) 19:36:00
CLSIDがうざい
128ビットの癖にたまに被るし
0018デフォルトの名無しさん2007/01/16(火) 19:37:05
COMの失敗は名前だけ
0019デフォルトの名無しさん2007/01/16(火) 19:47:43
検索できねー
0020デフォルトの名無しさん2007/01/16(火) 19:52:11
>>14
Windowsの枠組み内でしか生きられないメジャーだがローカルな技術としてな。。。

>>16
>他のプラットフォーム上のコンポーネントとの相互運用性も提供します。
だから、これが上手くいかなかったんだよ!
知ったかは氏ね
0021デフォルトの名無しさん2007/01/16(火) 20:07:52
怒りっぽい人ですね
0022デフォルトの名無しさん2007/01/16(火) 20:10:14
16はすぐ詐偽に引っかかるタイプ
0023デフォルトの名無しさん2007/01/16(火) 20:12:17
>>16 は単に MS のページか
どっかの解説サイトからとってきただけなんじゃないの
0024デフォルトの名無しさん2007/01/16(火) 20:21:00
COMを理解するために必死でC++の仕様を勉強した時期がありました。
嫌な思い出です。
0025デフォルトの名無しさん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
0026デフォルトの名無しさん2007/01/16(火) 21:02:02
>>5年持ったためしがないんだもの・・・・

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

ネーミングパターン

こきおろしパターン

ぐぐれパターン

話題逸らしパターン

0040デフォルトの名無しさん2007/01/22(月) 18:43:51
過疎
0041デフォルトの名無しさん2007/01/31(水) 13:09:50
CON
0042デフォルトの名無しさん2007/01/31(水) 13:46:23
OCN
0043デフォルトの名無しさん2007/03/09(金) 16:56:26
IE用のツールバー作ろうとして、
IDeskBandを継承したクラスのSetSiteで
パラメータからQueryInterfaceでIID_IOleWindowを
取得しようとしたんだが
E_NOINTERFACEエラーが出る。
なんか心当たりある方いらっしゃいませんか?
0044デフォルトの名無しさん2007/03/09(金) 22:46:43
もしかしてIE7なのが原因?
開発環境はVS2005です。
0045デフォルトの名無しさん2007/03/09(金) 22:54:14
どっと混む
0046デフォルトの名無しさん2007/03/10(土) 00:35:59
下手なシャレはよしなしゃれ
0047デフォルトの名無しさん2007/03/10(土) 01:27:30
>>43
IOleWindowって自分自身じゃね?
0048デフォルトの名無しさん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でもそうなってたんだが。
0049デフォルトの名無しさん2007/03/10(土) 15:34:41
>>48
IOleWindowとれたよ
親のReBar32WindowのハンドルもGetWindowで正しくとれてる。

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

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

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

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

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

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

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

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

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

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

>>75さんになにかごちそうしたい気持ちでいっぱいです。
0077デフォルトの名無しさん2007/05/08(火) 16:24:46
極稀に2chも役に立ったり立たなかったりする
0078デフォルトの名無しさん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のメソッドを呼び出すことは成功しています。
0079デフォルトの名無しさん2007/05/08(火) 18:41:37
javascriptからEventをAdviseしてあげた?
0080デフォルトの名無しさん2007/05/08(火) 20:21:50
>>78
Fire_Hoge()の呼び出しってどうやってます?
多分IHogeの実装クラスCHogeのインスタンスから呼び出してると思いますが、

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

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

つ DECLARE_CLASSFACTORY_SINGLETON

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

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

後は泥臭いやり方しか知らない
0082デフォルトの名無しさん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をお願いします。
0083デフォルトの名無しさん2007/05/08(火) 21:08:40
>>80のアンカー間違えました。>>79が正解です
0084デフォルトの名無しさん2007/05/08(火) 21:14:49
>>82は>>79に対するレスです。
>>83は誤爆です。

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

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

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

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

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

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

>>95
Mozillaのコード見たけど、想像以上に整然としてて驚いた。
0097902007/07/12(木) 11:31:55
>>93
だったらATLインターナルがいいかも。
0098デフォルトの名無しさん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
0099デフォルトの名無しさん2007/07/16(月) 07:43:51
3層アプリでビジネスロジックを
ドメインオブジェクトとして他のマシンに置きたいとき
COMならCOM+が使えるじゃないですか。
.NETだと何を使えばいいのでしょう?

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

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

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

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

Sunが横やり入れなければ数年前にJ++で出来ていたことなのにねぇ・・・
0118デフォルトの名無しさん2007/09/28(金) 04:52:55
組み込みでC#使ってるひといる?
0119デフォルトの名無しさん2007/10/01(月) 09:32:59
VB6の後継はC#だよね〜
0120デフォルトの名無しさん2007/10/01(月) 13:13:07
ぽとぺた環境のことか?
0121デフォルトの名無しさん2007/10/24(水) 14:50:19
どとねと環境のことだろう
0122デフォルトの名無しさん2007/10/31(水) 06:53:00
getUnk(&pUnk1);
getUnk(&pUnk2);
getUnk(&pUnk3);
0123デフォルトの名無しさん2007/11/03(土) 15:41:50
pUnkOut->release();
0124デフォルトの名無しさん2007/11/03(土) 19:23:29
IUnko
0125デフォルトの名無しさん2007/11/05(月) 19:49:15
eco->recycle(unko);
0126デフォルトの名無しさん2007/11/05(月) 21:55:35
シェルがCOMをまったく使わなくなる日が来たりするのだろうか
0127デフォルトの名無しさん2007/11/05(月) 23:14:29
果たしてそれはWindowsなのだろうか。
0128デフォルトの名無しさん2007/11/06(火) 01:23:31
果たしてWindowsのそれはシェルなのだろうか
0129デフォルトの名無しさん2007/11/11(日) 22:25:40
IThumbnailCache ってどこから手繰りよせたらいいのん?
IThumbnailProviderからもってくるとキャッシュみないよね?
01301292007/11/12(月) 00:26:45
>IThumbnailProviderからもってくるとキャッシュみないよね?

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

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

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

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

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

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

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

ドラッグイメージのZOrderをなんとかしたいわけですが、
ヒント等ご存知の方いらしたら教えてくんなましょ
0150デフォルトの名無しさん2007/12/15(土) 01:59:23
そのウィンドウと他のウィンドウと元のウィンドウと後から表示したいウィンドウが
どのウィンドウなのかわかんないのでAとかBとか名前付けて書いてくれると嬉しい
0151デフォルトの名無しさん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使わないと正常なんで、諦めるかも……
0152デフォルトの名無しさん2007/12/20(木) 16:43:05
mpeg compass.jp
名古屋駅近辺でお話しましょう
0153デフォルトの名無しさん2007/12/20(木) 23:05:18
COM初心者です。

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

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

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

IExtractImageを実装したんだけど、2000で動かすと時々フォルダ内の全ファイルに同じ
サムネイルが出るようになる不具合はどう対処したらいいんでしょう。
MSDNのサンプル実装で起きるし、フラグ類いろいろ変えたりマルチスレッド対応にしたり
しても改善せず・・・
0156デフォルトの名無しさん2008/01/03(木) 22:27:35
関数型でCOM使いたいんだけど、実装ありまっか?
0157デフォルトの名無しさん2008/01/03(木) 23:06:10
あるよ。
0158デフォルトの名無しさん2008/01/04(金) 21:05:48
処理系を教えてください
0159デフォルトの名無しさん2008/01/04(金) 21:12:55
>>144の本(ATL Internals 2nd Edition)て日本語版出ないのかねぇ。
0160デフォルトの名無しさん2008/01/04(金) 22:24:07
>>156
F#なら.NET経由でいけるのでは
0161デフォルトの名無しさん2008/01/06(日) 12:47:23
>>135
今更ながらCOMの仕事が入り勉強中助かりました( ´∀`)

すぐに絶版にするなら独占翻訳権を取得しないで欲しい。特にASCII。
それ以上にCOMはもう終わってるのか…(´・ω・`)?
0162デフォルトの名無しさん2008/01/07(月) 18:37:25
終わってるというよりは枯れてる・・・と思いたい
0163デフォルトの名無しさん2008/01/08(火) 08:38:47
COM無いとウィンドウズ自体起動しないだろ
0164デフォルトの名無しさん2008/01/08(火) 09:32:43
インタネッツセキュリティが無いので、DCOMは終わりマスタ。
PDFリーダーとか本当にメジャーなものしか存在が許されないというか。
0165デフォルトの名無しさん2008/01/08(火) 22:27:40
>>163
さすがに起動はするwwwwwwwwwww
0166デフォルトの名無しさん2008/01/08(火) 22:31:55
デスクトップ(HDESKTOP的な意味で)の表示くらいまではいけるうと思う。
0167デフォルトの名無しさん2008/01/09(水) 03:09:25
タスクマネージャとかってCOM使ってる?
0168デフォルトの名無しさん2008/01/09(水) 03:41:29
タスクマネージャくらいならパフォーマンスカウンタとかPSAPIくらいで大丈夫じゃねーか

デスクトップの表示まで行くと無理だな
IShellFolder
0169デフォルトの名無しさん2008/01/09(水) 13:36:00
アプリケーションのタブでアイコンを表示してるから
COMつかってるんじゃね
0170デフォルトの名無しさん2008/01/09(水) 13:43:28
な に が い い た い ?
0171デフォルトの名無しさん2008/01/10(木) 02:32:53
アイコン表示してるのはリストビューの標準機能とイメージリストコントロールでCOM関係ない
0172デフォルトの名無しさん2008/01/10(木) 02:40:58
VistaはCOM無しでは動かないかも
VistaのユーザーモードドライバはCOM仕様だから
0173デフォルトの名無しさん2008/01/10(木) 08:22:49
>>164
http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20030717/3/?ST=security

やべえ今までしらんかった
Administratorでログオンすると危険にさらされるんだね。
0174デフォルトの名無しさん2008/01/10(木) 18:28:10
そもそもDCOMをルー田子えさ攻め
0175本田2008/01/17(木) 17:43:02
>COMプログラマの解説書
>Crispin Goswell
>Microsoft Office Product Unit
>1995年 春
>1995年9月13日改訂
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdncomp/htm/com_co.asp
>抄録
>この解説書は、
>Microsoft(r) OLE Component Object Model(COM)オブジェクトを作成し、
>効果的に使用する方法を説明しています。
>例文はほとんどCで書かれていますので、実際に何が行われているかが、大変分かりやすく示されています。
>プログラマの中には、オブジェクトを実行するためにC++を好んで使用する人もいるでしょう。
>C++プログラマの観点からCOMの概念および基本的な使用法を論じているのは
>Kraig Brockschmidt著のInside OLE (第2版)(MSDN Library(Books))です。
>COMとは何か、またその設計や哲学の後ろにある動機付けをより理解する事に興味がある読者なら、
>Component Object Model Specification(MSDN Library(Specifications))の最初の2章を読んでください。
>第1章には簡単なイントロダクションを、第2章では徹底的に概要を解説してあります。
>この解説書ではInside OLEとCOM Specificationにある情報を、
>COMオブジェクトを実装する良い方法をいくつか示しながら解説するようにしてあります。
0176デフォルトの名無しさん2008/01/21(月) 23:07:01
VistaのExplorerで
デフォルトのIExplorerCommandProviderって取得できねーのかな?
なんかあの緑色のコマンドバーのなかのコマンドって余所から実行できないんで困る

プレビューペインとかナビゲーションペインを出し入れしたいんだけど。
0177デフォルトの名無しさん2008/01/24(木) 00:31:42
俺はしたくないしされたくもない
0178デフォルトの名無しさん2008/01/28(月) 17:29:23
タスクバーのツールバー(IDeskBand)をCOMサーバーとして作成しています。
ツールバーを表示させたとき、エクスプローラーごとダウンして
バグの発生場所を特定できません。
空のツールバーの作成・起動には成功したのですが、外部から取得したデータを
反映させる機能を追加したところ、ダウンする現象が発生しています。

COMサーバーのデバッグ方法をご教授ください。
環境は、WindowsVista、VC++2008EE、ATLおよびMFC不使用です。
0179デフォルトの名無しさん2008/02/06(水) 23:57:12
COM・・・
サーバ上のやつは取得できて、動かせます
クライアントからサーバ上のCOMを使いたい・・・
IDとかは設定してるのだが・・・
検索3時間してもわからず、ググるキーワードを2,3教えて下さい (-_-)
0180デフォルトの名無しさん2008/02/07(木) 00:19:02
>>178
Visual C++なら、アタッチすれば、あとは普通のアプリケーション同様に
ブレークポイントで止めて、変数見たりステップ実行したりできるぞ。

>>179
日本語でおk
0181デフォルトの名無しさん2008/02/07(木) 01:43:49
エッチ スケッチ
0182デフォルトの名無しさん2008/02/07(木) 01:46:42
>>179
きめえから市ね
0183179 レス禁止2008/02/07(木) 21:45:43
とりあえず2,3単語が分かりました、消えます
0184デフォルトの名無しさん2008/02/08(金) 03:48:03
>>179
DCOMの設定したら使えるけど危険すぎ。
閉じたネットワークでだけ使うものだよあれは。
0185デフォルトの名無しさん2008/02/08(金) 17:32:50
ネットワークに関係なく、
単にコンポーネントの提供する側と利用する側という意味で使っているかもよ。
179の書き方ではどういう意味か分からないけど。
0186デフォルトの名無しさん2008/02/08(金) 21:26:27
俺もそうかと思ってたので>>184の洞察力に感服
0187デフォルトの名無しさん2008/02/21(木) 16:24:48
このスレに住まわれるCOMの精霊様、
どうか以下の件についてお答えくださいませ。
VS2005でATLプロジェクトでWindowsサービスを作りましたが、
PreMessageLoop()の中で、以下のコードが無いとサービスが起動しません。
-----
if (SUCCEEDED(hr) && !m_bDelayShutdown)
 hr = CoResumeClassObjects();
-----
しかしサービスに1つでもCOMインタフェースを追加すると
CoResumeClassObjects()がS_OK以外を返すようになります。
そこでCoResumeClassObjects()を呼び出さないようにしても、
サービスは起動してくれます。

なぜCOMインタフェースが自分で追加していない状態では
CoResumeClassObjects()を呼ぶ必要があり、
COMインタフェースを追加すると呼ぶ必要がなくなるのでしょうか?
0188デフォルトの名無しさん2008/02/22(金) 01:05:40
Effective COMには
・1つ以上のクラスをエクスポートしてるサービスが最初のCoregisterClassObjectの呼び出しで開始してしまうと、それらのクラスの初期化の問題が起きる場合がある
・このためREGCLS_SUSPENDフラグで起動を遅らせて、CoResumeClassObjectsで起動させる
みたいなことはあったけど。

追加したときにフラグ上書きしたことになってるのではと想像。
01891872008/02/22(金) 13:15:06
ふむー、こういうことかな?
サービスそのものがCOMであるけど、サービスは起動直後に立ち上がるから、
自分でタイミング見て初期化しないといけない。
新たにCOM実装すると、ATLのどっかで初期化するようになる。
よってサービスでCoregisterClassOBjectsを呼ぶと2重初期化で
エラーを返すのかな。
なんにせよ、COM追加したら呼ばないでいいのだろうか。
とりあえず外部アプリからサービスのCOM呼び出しとかは、うまくは動いてるし。
0190デフォルトの名無しさん2008/02/26(火) 02:30:07
外部からエクスプローラーバーのIBandSiteを取得したいのですが、
とれません。
どのようにして取得すればよいでしょうか?
0191デフォルトの名無しさん2008/03/23(日) 00:54:12
CHogeってCOMクラスが
HRESULT SetHoge(IDispatch* pV)
ってメソッドを持っていて、pVのポインタをCHogeのメンバとして保持するとき
- SetHoge()の先頭くらいでthis->pV->AddRef()
- FinalRelease()でthis->pV->Release()
ってすればOKって認識であってるかな。
0192デフォルトの名無しさん2008/03/27(木) 21:43:35
>>191
一般的にはこんな感じ

SetHoge(IHoge* pHoge)
{
 if (pHoge) pHoge->AddRef();
 if (this->pHoge) this->pHoge->Release();
 this->pHoge = pHoge;
}

NULLをセットして開放することを許可しておくと、循環参照等を
断ち切るときのためになるので吉。

ATL 等なら、CComPtr<IHoge> pHoge とメンバ変数を宣言し、
SetHoge(IHoge* pHoge) { this->pHoge = pHoge; } で十分。
非 ATL なら _com_ptr_t の利用も考慮してみると良いと思う。
01931912008/03/27(木) 22:33:15
ああそうかメンバ自体をCComPtrにしとけば代入だけでいけますね。
0194デフォルトの名無しさん2008/04/13(日) 00:28:44
おお、COMのすれ、あるんだ!
0195デフォルトの名無しさん2008/04/13(日) 03:00:22
よろしくね(´・ω・`)
0196デフォルトの名無しさん2008/04/13(日) 03:09:06
先生、googleがCOMを検索してくれないので勉強できません
0197デフォルトの名無しさん2008/04/14(月) 23:31:09
COM
OLEオートメーション総合
どうしてCOMは即死したのか
の3つのCOM関連スレがあるけど、どう使い分けるの?
というかどれもすでに死んでるのかな、、少しさびしい。
0198デフォルトの名無しさん2008/04/15(火) 00:13:00
>>197
IEコンポーネントをC++から使う話はたまにWin32APIスレで見る。
.NETから各種COMコンポーネントを使う話もたまにC#やVB.NETのスレで見る。
あと、DirectXのことは当然DirectXのスレで扱われる。

質問はそっちで賄われるから、
その3つのスレはほとんど雑談くらいにしか使われないんだよね。
0199デフォルトの名無しさん2008/04/18(金) 01:20:01
雑談モード。
たしかMSHTML::IHTMLWindowだったか、QueryServiceというのがあったが、QueryInterfaceと何が違ったんだろう…。
どっちもIFを取得するという点では同じなのだが。何か長短があるんだろうか。
たとえば自分がComponent作るとき、QuerySeriviceでIF提供したほうがいいなって場面あるんだろか。
0200デフォルトの名無しさん2008/04/22(火) 15:39:39
IBindCtxとIMonikerの関係と、存在意義について教えてください。
0201デフォルトの名無しさん2008/04/22(火) 18:00:23
それらは、MkParseDisplayNameとBindToObjctや、
それをラップしたCoGetObjectなどのように
文字列からCOMオブジェクトを作るためのものだと俺は理解している。

IMonikerはその文字列をくるんだだけのインタフェース。
IBindCtxはオプションを指定するBIND_OPTSをくるんだだけのインタフェース。
実際にはもう少し高機能だろうけど。

文字列ってのは何でもあり。ファイルパスやURLもそうだし、
とあるExcelブックのあるセルを参照するのは
"C:\[hoge.xls]Sheet1!A5"みたいな感じだったと思う。
02022002008/04/22(火) 18:45:43
>>201
ありがとうございます。

IBindCtxやIMonikerを引数に渡すAPIやInterfaceが多いのですが、
MSDNを何度読んでも、どういう時にどういう設定で使えばよいか良くわからず、困っています。

MSDNに、
The IBindCtx interface provides access to a bind context, ・・・
と書かれていますが、”bind context”とは何なのでしょうか?
0203デフォルトの名無しさん2008/04/22(火) 18:49:42
文字列からオブジェクトへの変換を行うバインダへのハンドルのようなもんと思えば
0204デフォルトの名無しさん2008/04/23(水) 07:47:16
>>199
自分の理解では。QueryInterfaceは、あくまでもそのオブジェクトが持つ機能を公開するもので。
QueryServiceは、そのオブジェクトが管理している別のオブジェクトを返すものだと思っている。
例えば、プラグインとかさ。
0205デフォルトの名無しさん2008/04/23(水) 16:12:01
>>119
QueryInterface は自分自身の IUnknown を返さなくてはならない
(オブジェクトの寿命や同定とかいう観点から)という制約というか仕様なので、
要求された機能を持つ他のオブジェクト(かも知れない)のインタフェイスを
返すには使えないから。
0206デフォルトの名無しさん2008/04/23(水) 17:03:26
>>202
どう使うかということは、MSDNライブラリを眺めるより、
サンプルを探しにググって実例を見たほうが分かるようになる。
0207デフォルトの名無しさん2008/04/23(水) 19:07:22
>>206
全くその通りなんだけど、
サンプル見つからなくてね・・・。
0208デフォルトの名無しさん2008/04/25(金) 00:15:14
>>204
>>205

なるほどー。QSで帰ってくるものは自分自身じゃないんだ。しらなかった。どうもありがとう。
ん?でもでも、だとすると次なる疑問が。。。

QIの価値はわかる。同一コンポーネントが複数IFを持つことは価値があるし、
(IPersistXXXXを持ち、IMyAppを持ち、IMyConfigを持ち、とか)
それが機能するには、Platform側の標準やりとりが必要だから。
(Javaだと言語が切り替えの仕組みをサポートするとか)

それに対しQSって何で必要なんだろ。
標準やりとりが必要ないなら、単純にGetter相当でOKのような。
0209デフォルトの名無しさん2008/04/25(金) 01:37:41
ごめん、自己解決。なんで必要か分かった。
はじめから追加サービスがどれだけあるか決まってるならGetterでいいが、
今後の拡張にそってどれだけサービスが増えるか分からないので、名前引きにした、ということですな。
expandoみたいな考え方な。

だからPluginとかいう話もガイシュツだったわけね。賢いなぁ、アドバイスしてくれた人
0210デフォルトの名無しさん2008/04/26(土) 01:29:06
COMコンポーネントのメソッドから、COMコンポーネント呼び出し元クライアントの
SID取って管理者権限か判断とかできるかな?
0211デフォルトの名無しさん2008/09/07(日) 09:08:57
COM勉強してるけど、楽しいなあ
0212デフォルトの名無しさん2008/09/07(日) 09:56:27
最初だけだよ・・・一定規模以上のプログラム作り出したら全てを放り投げたくなる
0213デフォルトの名無しさん2008/09/07(日) 10:50:31
Javaが90年代に鯖サイドであっという間に普及したのはCOMのめんどくささのおかげ
CORBAよりはましだけど
0214デフォルトの名無しさん2008/09/07(日) 18:37:14
何ズレた事言ってんだよw
0215デフォルトの名無しさん2008/10/22(水) 17:34:53
C#からCOMいじりしてると、なんか脳液がドクドク出てくるのが分かる
もうシェルインターフェイスだけで丼飯バクバク食えるぞ
自分がMだとは思わなかった
0216デフォルトの名無しさん2008/10/22(水) 18:26:23
C++からCOMいじると最強。 >これ、何の意味がある暗号インターフェース?
0217デフォルトの名無しさん2008/10/22(水) 18:31:43
これ、何語? >MFC
0218デフォルトの名無しさん2008/10/24(金) 13:03:42
C#でCOM使ったことあるけどそんな大変でもないよね。
>>215はどんだけ敏感なんだ?
0219デフォルトの名無しさん2008/10/24(金) 19:23:32
C#ではExcelのオートメーションみたいにデフォルト引数を使いまくりだと死ねる。
0220デフォルトの名無しさん2008/10/27(月) 11:06:10
C#では重かったり、.net frameworkでサポートされてないのを
C++で書いてCOM化してC#から呼ぶのは使えるな。
0221デフォルトの名無しさん2008/10/27(月) 11:10:24
 ↑
C#とCOMを無きものにしたらどうよ?
0222デフォルトの名無しさん2008/10/27(月) 12:34:16
windowsでGUIアプリ作るのにC#って選択肢ははずせないしね・・・
さすがに、いまさらATLとかは辛い。
0223デフォルトの名無しさん2008/10/27(月) 12:43:10
>windowsでGUIアプリ作るのにC#

外して下さい。
おながいします。
0224デフォルトの名無しさん2008/10/30(木) 22:47:48
COM作ろうと思って、shobjidl.hインクルードしたんだが、多重定義のエラー

で、調べてみるとNO_WIN32_LEAN_AND_MEANをdefineすれば解決できるらしい

#define NO_WIN32_LEAN_AND_MEANしようが、コンパイルオプションに/D NO_WIN32_LEAN_AND_MEAN

つけようが、まだ多重定義エラーがでる・・・

解決策おしえてー;;

win xp sp3
vc++6
platform sdk 2003 server sp1
0225デフォルトの名無しさん2008/10/30(木) 23:04:27
WIN32_LEAN_AND_MEANを定義したままなんてことはないよな?
0226デフォルトの名無しさん2008/10/30(木) 23:08:44
>>225
はい。
ソースのほうは

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

にしてるので・・・

はあ・・・・なんでだ・・・
なんだかんだで1日中調べてる・・・

どこかで、VC++6では2003年2月以降に発行されたplatform sdkは使えないとか
書いてあったけどそれは違うよね・・・?
0227デフォルトの名無しさん2008/10/30(木) 23:12:53
>>226
それ削除しないと駄目だ。
両方定義していたら、たぶんWIN32_LEAN_AND_MEANが優先される。
0228デフォルトの名無しさん2008/10/30(木) 23:19:59
>>227
優先される?って?

/D WIN32_LEAN_AND_MEAN単独でも
#define WIN32_LEAN_AND_MEAN単独でも
どちらも同じように多重定義エラーでるんですよね・・・


ちなみに・・VC++6のコンパイルオプションだけど、
プロジェクト⇒設定⇒C/C++オプションのところに
/D WIN32_LEAN_AND_MEANを加えるですよね
0229デフォルトの名無しさん2008/10/30(木) 23:29:32
>vc++6 
>platform sdk 2003 server sp1 

VCのバージョンを上げろゴラってことじゃないかと・・・
0230デフォルトの名無しさん2008/10/30(木) 23:39:59
>>228

NO_WIN32_LEAN_AND_MEANよりWIN32_LEAN_AND_MEANが優先されるだろうからWIN32_LEAN_AND_MEANのマクロシンボルを削除しろってことじゃないの?

>>224と>>228の内容が矛盾してるよ。
>>224ではNO_WIN32_LEAN_AND_MEANを定義したいと言ってるのに>>228ではWIN32_LEAN_AND_MEANを定義してるよ。
0231224,226,2282008/10/31(金) 00:08:51
すみません。
すべてNO_WIN32_LEAN_AND_MEANです。
0232デフォルトの名無しさん2008/11/10(月) 20:10:51
永遠なるCOMを称えてage
0233デフォルトの名無しさん2008/12/07(日) 02:34:42
Windowsの音量を変更するCOM教えてください。。。
すんません、こんな質問で。
0234デフォルトの名無しさん2008/12/08(月) 12:28:56
つ[http://www.google.co.jp/search?hl=ja&q=Windowsの音量を変更するCOM教えてください]
0235デフォルトの名無しさん2009/04/08(水) 22:12:02
"wshom.ocx"をimportしようとすると生成された.tlh,.tli でエラーが発生します

#import "C:\WINDOWS\system32\wshom.ocx" rename_namespace("XXX") named_guids

debug\wshom.tlh(1004) : error C2629: 'class _variant_t (' は不正です。
debug\wshom.tli(832) : warning C4003: マクロ 'GetFreeSpace' に指定された実引数の数が少なすぎます。
…

import以外にはなにもしていない(mainからreturnしているだけ)なのにこのようなエラーがでる理由がわかりません。
importするやり方が悪いのでしょうか?
0236デフォルトの名無しさん2009/04/10(金) 19:40:45
ほしゅ
02372352009/04/11(土) 21:35:32
ITypeLib ViewerからVBScript Regular Expression を*.IDLファイルに保存したら、
ファイルに出力されるインターフェースが途中までしか保存されません。

具体的には、IregExp2インターフェースの

interface IRegExp2 : IDispatch {
[id(0x00002711), propget]
HRESULT Pattern([out, retval] BSTR* pPattern);
[id(0x00002711), propput]
HRESULT Pattern([in] BSTR pPattern);
[id(0x00002712), propget]
HRESULT IgnoreCase([out, [EOF] ←[EOF]は出力されません。単にファイル終端なだけです

ここまででファイルの終端になっています。何が悪いんだろう・・・


0238デフォルトの名無しさん2009/04/13(月) 02:42:25
>>237
最近同じところではまった気がする

結局、何が悪いかは分からなかったけど、ITypeLib View のウィンドウの右ペインで
テキスト選択 => コピー => エディタで貼り付け、
で回避した

ちなみにコピーは Ctrl+C
Ctrl+C のコピーできるなら、マウス右クリックの編集メニューサポートしとけよって…
02392352009/04/14(火) 22:04:30
ありがとう!!!

手動コピペでうまくいった
02402352009/04/14(火) 22:48:06
>>233
> Windowsの音量を変更するCOM教えてください。。。
> すんません、こんな質問で。
>

   Dim objShell
  Set objShell = CreateObject("Shell.Application.1")
  objShell.ControlPanelItem("mmsys.cpl")

これでどうよ?コントロールパネル-サウンドとオーディオデバイスのプロパティ を出すだけだけど
02412352009/04/14(火) 23:23:57
APIでwaveOutSetVolume()ってのがあるみたいだな>>オーディオの調整
0242デフォルトの名無しさん2009/04/16(木) 13:13:27
はいはい
0243デフォルトの名無しさん2009/05/05(火) 15:20:06
>>235
#import <wshom.ocx> rename("FreeSpace","FreeSpace2")

main.obj - エラー 0、警告 0



0244デフォルトの名無しさん2009/08/27(木) 04:41:21
あげ
0245名無しさん@そうだ選挙に行こう2009/08/30(日) 05:14:08
COM形式の実行ファイルの話はこのスレでいいんですか
0246名無しさん@そうだ選挙に行こう2009/08/30(日) 12:33:10
いいとは思うが、COM形式の実行ファイルって何だ?
0247名無しさん@そうだ選挙に行こう2009/08/30(日) 12:47:30
command.com
0248名無しさん@そうだ選挙に行こう2009/08/30(日) 13:10:03
いまさらそっちのCOMなのか
じゃあ違うな
個別のスレはなさそうだし、「スレ立てるまでもない質問はここで」とかで聞くしかないんじゃないの?
0249デフォルトの名無しさん2009/10/20(火) 05:39:50
office製品との連携にc++でcom(dll)作ってしまうのが良さそうと思ったけど、誰も使ってなさそうだな。orz
みんなvbaで済ませちゃってるっぽいな。vb回避したいのでいろいろ探してcomにたどり着いたのに。orz
それとももうcomは捨てて、まねーじcom(.net)のほうに逝っちゃったかな?
.netはcom使える様にする設定が面倒と思った。
0250デフォルトの名無しさん2009/10/21(水) 05:21:57
もうだれもobaやってないみたいだなw
0251デフォルトの名無しさん2009/10/30(金) 12:34:24
Inside COMって絶版だったのか。
会社にあったから何とかなったけど、
XPCOMでの関連書籍にEssential COMとかあるのに、それも絶版とか・・・
0252デフォルトの名無しさん2009/10/30(金) 12:43:45
Inside COM
には、
COMは誰も定義が言えないうえ今までなかったプログラミングの構造だが、
今後のプログラミングはこの構造になるって、
ばっちゃが書いてた。
0253デフォルトの名無しさん2009/10/31(土) 04:55:58
いまは.netの方向に進んでて、comは捨てられてるな。
0254デフォルトの名無しさん2009/11/02(月) 09:43:44
ドトネト進むというか迷走だがw
0255デフォルトの名無しさん2009/11/02(月) 16:10:20
com回帰来るの?
0256デフォルトの名無しさん2009/11/02(月) 16:33:30
そうならなくて、HTML5だろ、jk
0257デフォルトの名無しさん2009/11/12(木) 23:34:11
シェル拡張ってInprocServerじゃないとダメなの?
サンクも出来ないLocalServerなCOMも呼べないとかどうしようもないお荷物じゃねーか
0258デフォルトの名無しさん2009/11/13(金) 16:08:58
>【IT】英ITサイトの「Microsoft製品のワースト10」、1位はあのOS[09/11/13]
>ttp://anchorage.2ch.net/test/read.cgi/bizplus/1258085902/
英ITニュースサイトV3.co.ukが、同サイトが選んだMicrosoft製品のワースト10を
発表した。
10位はMS-DOS 4.0、
9位はIE 5、
8位は「期待ほど革新的ではなかった」という理由でWindows 95、
7位はZune、
6位はBob(Windows 3.1/95にバンドルされたナビゲーションシステム)、
5位は「セキュリティ問題を引き起こした」という理由でActiveX、
4位はWindows Vista、
3位はVista Capable(Vista対応PCにロゴを付けるプログラム。実際はVista Capableは
Home Basicエディションにしか対応していなかった)、
2位はClippy(クリップの形をしたOfficeのマスコットキャラクター)、
1位はWindows Meだった。

ソースは
http://www.itmedia.co.jp/news/articles/0911/13/news028.html
Top 10 worst Microsoft products of all time(V3.co.uk)
http://www.v3.co.uk/v3/news/2252318/top-worst-microsoft-products
http://www.v3.co.uk/v3/news/2252318/top-worst-microsoft-products
http://www.v3.co.uk/v3/news/2252318/top-worst-microsoft-products?page=2
0259デフォルトの名無しさん2010/01/30(土) 22:24:33
VC++ のキーワード __hook で COM のイベントのソースとハンドラを繋げる仕組みがありますが、
__hook を使わず、COM 系関数などで完全に再現できるものでしょうか。
0260デフォルトの名無しさん2010/02/05(金) 18:06:08
いろいろ調べたところ、
__hook と同等の機能かはわかりませが、
IConnectionPointContainer インターフェイスを用いることで、
__hook を使わなくても COM のサーバーとクライアントを
イベントで関連づけることができました。

お騒がせししました。
0261デフォルトの名無しさん2010/02/05(金) 18:56:45
おお
0262デフォルトの名無しさん2010/09/01(水) 22:42:43
COMインタフェース登録時のパス指定について。

動作&開発環境:Windows XP Embedded & VC++2005

HogeHogeCom.dllを作成し、IHogeObjectを作りました。
dllと同一フォルダにバッチファイルを作成し、以下を記述しました。

regsvr32 HogeHoge.dll

バッチファイルを叩いたところ、
「HogeHoge.dllのDllRegisterServerは成功しました。」と表示されますが、
レジストリ登録が失敗しています。
CoCreateInstance()で0x80040154 (REGDB_E_CLASSNOTREG)が返されます。

regsvr32 に相対パスではなく絶対パスを指定すると、
レジストリ登録が成功します。
CoCreateInstance()で0 (S_OK)が返されます。


質問の内容ですが、
regsvr32でCOM登録する場合は、絶対パスを指定しないとダメなのでしょうか?
0263デフォルトの名無しさん2010/09/02(木) 00:07:50
環境変数
0264デフォルトの名無しさん2011/02/25(金) 23:01:19.09
蘇れ
0265デフォルトの名無しさん2011/02/26(土) 19:19:28.35
>>262
レジストリ登録ファイル使えばええがな。
アレと、継承ツリーを遡り、IIDをマッピングする独自テンプレート
書いておくとATL無しでも簡単にCOMサーバー書けるぞ。

話は変わるが.netってCLSID付きのクラスや、共有のインスタンスって
作れるの?
0266デフォルトの名無しさん2011/03/03(木) 00:26:26.58
>>265
後者は知らない。
CLSIDはGuid属性付きでクラス定義すればOK。
0267デフォルトの名無しさん2011/03/12(土) 21:46:04.54
IDispatchって簡単に言うとなんですか?
0268デフォルトの名無しさん2011/03/13(日) 04:23:01.91
WM_COMMAND
0269デフォルトの名無しさん2011/03/13(日) 06:54:02.94
ポリモーフィズム
0270デフォルトの名無しさん2011/03/18(金) 23:42:19.02
ん、つまり
いみがわからない
0271デフォルトの名無しさん2011/03/26(土) 23:15:49.47
馬鹿にはcomは無理。
0272デフォルトの名無しさん2011/04/09(土) 17:50:41.49
.netでCOMインターフェイス実装して
なんも知らないユーザーがMarshal.ReleaseComObjectすると例外でるよね
だってCOMオブジェクトじゃないもん!って怒られちゅうんだ
0273天使 ◆uL5esZLBSE 2011/07/06(水) 07:02:42.16
これ ; デリミタっていうんだけどさ、よく打ち忘れるよね
Rubyだとつけなくてよくなるんだけど


ゴミだな
0274デフォルトの名無しさん2011/07/06(水) 08:54:45.07
キチガイはすっこんでろ
0275デフォルトの名無しさん2011/09/01(木) 21:25:48.66
COMあげ
0276デフォルトの名無しさん2011/09/02(金) 22:09:39.14
MFCのWindowsアプリから、COMのアウトプロセスサーバーのメソッド呼び出し中に
Windowsメッセージに割り込まれることがありますが、これを防ぐ方法はありますか?
現状は、COMの呼び出し中にフラグを立てて、Windowsメッセージ受信時にフラグONなら
同メッセージをPostMessageし直して処理を保留としていますが、スマートではないので。
0277デフォルトの名無しさん2011/09/02(金) 22:22:13.72
充分スマートです
0278デフォルトの名無しさん2011/09/02(金) 22:45:33.25
>>277
レスありがとうございます。
他に上手い方法が思いつかないので、とりあえずこの方法で対処したいと思います。
0279デフォルトの名無しさん2011/09/02(金) 22:56:48.28
はい
がんがって
0280デフォルトの名無しさん2011/10/11(火) 18:24:40.07
qttabbarとかのソースみたらCOMだらけだったんですが
ああいうのってどこで学習したらいいんでしょうか
0281デフォルトの名無しさん2011/10/12(水) 03:02:03.58
ttp://www.amazon.co.jp/dp/4881357557/
0282デフォルトの名無しさん2011/10/12(水) 11:55:53.42
基本的に今の時代0からOLE/COM学習するの無理っぽくね?
昔俺が手がかりにしたMSの仕様書は今探してもことごとく抹消されてた。
Inside OLEとか絶版だし、手に入れても内容がバラけてて網羅性もない。
やっぱりあの仕様書群読むのが一番手っ取り早いはずなんだけど。
0283デフォルトの名無しさん2011/10/27(木) 10:58:54.79
http://msdn.microsoft.com/en-us/library/ee663262(v=VS.85).aspx
0284デフォルトの名無しさん2011/11/28(月) 20:38:46.98
シェルエクステを簡単に実装する方法を教えてください
■ このスレッドは過去ログ倉庫に格納されています