COM
■ このスレッドは過去ログ倉庫に格納されています
0001IUnkonwn
2007/01/10(水) 20:13:150044デフォルトの名無しさん
2007/03/09(金) 22:46:43開発環境はVS2005です。
0045デフォルトの名無しさん
2007/03/09(金) 22:54:140046デフォルトの名無しさん
2007/03/10(土) 00:35:590047デフォルトの名無しさん
2007/03/10(土) 01:27:30IOleWindowって自分自身じゃね?
0048デフォルトの名無しさん
2007/03/10(土) 10:47:13http://idm.s9.xrea.com/ratio/2004/06/17/000104.html
ここに
>ツールバーがactivateされるとき、 IObjectWithSite#SetSite が呼ばれる。
>パラメータのIUnknownインターフェースは、IOleWIndowをquery可能なので、
>これを使ってツールバーの親となるウィンドウの情報を取得する。
>MSDNのサンプルでは、このタイミングでツールバー本体のウィンドウを生成している。
ってあって、MSDNでもそうなってたんだが。
0049デフォルトの名無しさん
2007/03/10(土) 15:34:41IOleWindowとれたよ
親のReBar32WindowのハンドルもGetWindowで正しくとれてる。
Vistaだけども。
0050デフォルトの名無しさん
2007/03/10(土) 19:28:49解決したら報告します。
0051デフォルトの名無しさん
2007/04/13(金) 18:44:41COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCΟMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOMage
0052デフォルトの名無しさん
2007/04/16(月) 19:50:58あれATL7.0じゃないと動かねーじゃねぇか
0053デフォルトの名無しさん
2007/04/25(水) 18:19:04MFCでコントロール作ってそれをコンテナに組入れるのはやったことあるけど
ATLで見えないWinsock+COMサーバ.exeに挑戦中でCOMとソケット通信をどのように
連携すればいいのかで色々悩んだ。
結局ウィンドウメッセージとグローバル変数を駆使してなんとか目処がついた
けど、もっとスマートなやり方が載ってる参考書はないんでしょうか?
0054デフォルトの名無しさん
2007/04/26(木) 12:40:13ウィンドウを持たないCOMオブジェクトで、Winsockの非同期やるんなら、イベント使った方が
良いと思う。
005553
2007/04/26(木) 18:32:04ありがとう。
>イベント使った方が良いと思う。
のイベントとはウィンドウメッセージとの理解でよいですか?
もう一点教えていただきたいことがあるのですが、
ブラウザに貼り付けたコントロール(ocx)からATLで作ったCOMサーバ.exeに
Dispatchしてメソッドを呼ぶことができたのですが、
ブラウザを閉じるとCOMサーバ.exeも終了してしまいます。
ブラウザを閉じてもCOMサーバ.exeを常駐させたいのですが
クライアント側/サーバ側どちらで対応すればよいのかさえ検討がつきません
どのようにすればよいかご存知でしょうか?
0056デフォルトの名無しさん
2007/04/26(木) 19:14:000058デフォルトの名無しさん
2007/04/27(金) 10:49:590059デフォルトの名無しさん
2007/04/28(土) 18:07:150060デフォルトの名無しさん
2007/04/28(土) 18:31:14言語は問わないのですが、できればVCについてお願いします。
0061デフォルトの名無しさん
2007/04/29(日) 02:27:45なにぃっ、Mageだと!?貴様鉄道板住人だな!
0062デフォルトの名無しさん
2007/05/03(木) 12:01:20それについて議論しよう
0063デフォルトの名無しさん
2007/05/03(木) 12:01:470064デフォルトの名無しさん
2007/05/03(木) 12:35:53もう存在意義がなくなってんじゃないの?
0065デフォルトの名無しさん
2007/05/03(木) 12:38:080066デフォルトの名無しさん
2007/05/04(金) 00:28:42アプリ間でデータ交換とか外部アプリへの機能提供とかの場面で利用価値あると思うけど
まあ、代替手段は色々あるし、わざわざムズい技術を覚えてまでcomを利用する必要もないか
特に開発人口が多い業務系開発だったら尚更だな
0067デフォルトの名無しさん
2007/05/04(金) 00:43:47もしくはCOBOL
0068デフォルトの名無しさん
2007/05/04(金) 14:13:48ActiveXでもOLEでもなくDLL+αとしてのCOMっていう観点でさ。
なんにしてもMFCやATLで新しくコンポーネント作るってのはなくなっていくんだろうな。せいぜいVB6でか.NETアセンブリからタイプライブラリ作る位になるのか。
0069デフォルトの名無しさん
2007/05/07(月) 18:10:27親ウィンドウのメッセージループから自exe内のCOMオブジェクトを
どのように参照すればよいかわかりません。
マクロで展開されたポインタがどこかにあると思うのですが
どのように参照すればよいでしょうか?
ATL初心者なので質問の表現がおかしいかも知れませんが
よろしくお願いします。
007069
2007/05/07(月) 19:26:22Choge *a=(Choge*)&ObjectMap[n];
で参照できました。
で、いいですか? ←直感的にやったらできたので不安ですが・・・
0071デフォルトの名無しさん
2007/05/08(火) 03:09:340072デフォルトの名無しさん
2007/05/08(火) 12:19:590073デフォルトの名無しさん
2007/05/08(火) 12:45:220074デフォルトの名無しさん
2007/05/08(火) 13:32:57クラスビューからメソッドと接続ポイントを追加したんですが
xxxxx.idlとxxxxxCP.hに空のクラスを作るだけで
メソッドの雛形作ってくれないんですよ。
最初のウィザードのときシンプルオブジェクトで作成してるからでしょうか?
0075デフォルトの名無しさん
2007/05/08(火) 13:42:03クラスビューに IHoge と Libの下に _IHogeEvents が出来ているでしょ
イベントメソッド追加したければ _IHogeEventsで右クリック - メソッド追加で追加できるよ
メソッド追加した後、実装クラス (CHoge) の方で右クリック - 接続ポイントの追加をもう一回
やるのを忘れんな
0076デフォルトの名無しさん
2007/05/08(火) 14:49:43>接続ポイントの追加をもう一回やるのを忘れんな
もう一回やったらできました・・・なぜもう一回なのかわかりませんか゛
とにかく今日一日試行錯誤していたのが「もう一回」のキーワードで解決しました。
>>75さんになにかごちそうしたい気持ちでいっぱいです。
0077デフォルトの名無しさん
2007/05/08(火) 16:24:460078デフォルトの名無しさん
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:370080デフォルトの名無しさん
2007/05/08(火) 20:21:50Fire_Hoge()の呼び出しってどうやってます?
多分IHogeの実装クラスCHogeのインスタンスから呼び出してると思いますが、
COMクライアントが作ったCHogeインスタンスから呼ばないとFireできないっす
008180
2007/05/08(火) 20:30:56インターフェースをシングルトンにしとけば作成されるインスタンスは必ず一つなので、
いっそシングルトンにしてしまうとか
つ DECLARE_CLASSFACTORY_SINGLETON
ただこれをやると以下の問題も・・・
つ http://support.microsoft.com/kb/198834/ja
後は泥臭いやり方しか知らない
0082デフォルトの名無しさん
2007/05/08(火) 21:07:42<SCRIPT language="javascript" for="HogeID" event="HogeEvents(a, b)">
alert(a);
</SCRIPT>
<OBJECT ID="HogeID" CLASSID="CLSID:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
</OBJECT>
Adviseをお願いします。
0084デフォルトの名無しさん
2007/05/08(火) 21:14:49>>83は誤爆です。
>>80,81
ありがとうございます。
参考にさせていただき再び試行錯誤させていただきます。
0085デフォルトの名無しさん
2007/05/08(火) 21:21:59書き忘れましたが、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すばやいレスありがとうございます。
さらに詳しいCOMの内情まで教えていただきまして勉強になりました。
感謝いたします。
0089デフォルトの名無しさん
2007/07/08(日) 15:55:55なにせ情報や サンプルがなかなか見当たらないので
0090デフォルトの名無しさん
2007/07/09(月) 09:14:09これはまぁわかりやすい方。
0091デフォルトの名無しさん
2007/07/10(火) 20:39:52詳しい本は?
0092デフォルトの名無しさん
2007/07/11(水) 09:08:04それなら>>90の本とMSDN。
IEコンポ専門に突っ込んで書いてる本はないとおもう。
英語のMSDN読みまくる根性ないと無理。
0093デフォルトの名無しさん
2007/07/11(水) 20:47:11IWebBrowser2を実装して、ActiveXコントロールをホストしたい。
0094デフォルトの名無しさん
2007/07/11(水) 22:03:14http://msdn2.microsoft.com/en-US/library/aa752127.aspx
> Custom Implementation No
ActiveXコントロールをホストしたいだけならIWebBrowser2を実装する必要は無いぞ。
0095デフォルトの名無しさん
2007/07/11(水) 23:27:020096デフォルトの名無しさん
2007/07/12(木) 00:21:14ぬあー、そうなのか。
>>95
Mozillaのコード見たけど、想像以上に整然としてて驚いた。
0098デフォルトの名無しさん
2007/07/15(日) 21:24:58興味がある方は、復刊リクエストご協力ください
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ドメインオブジェクトとして他のマシンに置きたいとき
COMならCOM+が使えるじゃないですか。
.NETだと何を使えばいいのでしょう?
Web Serviceだとサーバ側にインスタンスを作って
継続的に使用できないですよね。
となると.NET Remotingかな。
0100デフォルトの名無しさん
2007/07/16(月) 08:53:34System.EnterpriseServices でCOM+
010199
2007/07/16(月) 11:31:25なるほど!
結局はCOM+ですか。
.NetはCOMをうまく内包しているんですね。
ということは、「.NetになったらCOMは必要ない」
という意見は的外れなんですね。
0102デフォルトの名無しさん
2007/07/16(月) 15:54:410103デフォルトの名無しさん
2007/07/16(月) 21:18:15CLR自身がCOMで実装されてるのに、誰だよそんなこと言った奴は。
0104デフォルトの名無しさん
2007/08/15(水) 00:05:12知る方法はないでしょうか?
0105デフォルトの名無しさん
2007/08/17(金) 01:49:01(直接DLLからインスタンスを生成する方法がないわけじゃないけど)
0106デフォルトの名無しさん
2007/08/20(月) 22:00:05ということで、プログラミング環境は90年代前半に戻りつつあるよね。
ホビープログラマとしてはプログラムなんて動けばなんでもいいし。
0107デフォルトの名無しさん
2007/08/21(火) 08:37:590108デフォルトの名無しさん
2007/08/21(火) 19:01:550109デフォルトの名無しさん
2007/08/22(水) 22:17:32保証されているんでしょうか?
0110デフォルトの名無しさん
2007/08/24(金) 13:49:34なってない場合バグ。その辺のロジックはATLとかがサポートしてて
直接コーディングすることは少ないから普通は大丈夫。
アウトプロセスの複合サーバーの場合は、
インターフェイスが開放されてもプロセスが終了しないものがある。
WordやExcelがその例。
0111デフォルトの名無しさん
2007/08/24(金) 14:44:18してもDLLがロックされたままになるのは別の問題ですかね?
0112デフォルトの名無しさん
2007/08/26(日) 08:22:250113デフォルトの名無しさん
2007/08/26(日) 12:43:19そのオブジェクトが消え去る
・あるDLLに属しているCOMオブジェクトの生存数が0
になったときにそのDLLをアンロードしてほしい
この二つは全く別の話。
0114デフォルトの名無しさん
2007/09/27(木) 10:42:390115デフォルトの名無しさん
2007/09/27(木) 16:33:32どの分野でc++のシェアが下がったんだろう
業務系→cobol、j2ee
組み込み系→c、c++、asm
0116デフォルトの名無しさん
2007/09/27(木) 16:48:300117デフォルトの名無しさん
2007/09/27(木) 18:15:23Windows のソフトでわずかだけれども C# が使われ始めているな。
以前ならMFCで書かれていたような奴が。
Sunが横やり入れなければ数年前にJ++で出来ていたことなのにねぇ・・・
0118デフォルトの名無しさん
2007/09/28(金) 04:52:550119デフォルトの名無しさん
2007/10/01(月) 09:32:590120デフォルトの名無しさん
2007/10/01(月) 13:13:070121デフォルトの名無しさん
2007/10/24(水) 14:50:190122デフォルトの名無しさん
2007/10/31(水) 06:53:00getUnk(&pUnk2);
getUnk(&pUnk3);
0123デフォルトの名無しさん
2007/11/03(土) 15:41:500124デフォルトの名無しさん
2007/11/03(土) 19:23:290125デフォルトの名無しさん
2007/11/05(月) 19:49:150126デフォルトの名無しさん
2007/11/05(月) 21:55:350127デフォルトの名無しさん
2007/11/05(月) 23:14:290128デフォルトの名無しさん
2007/11/06(火) 01:23:310129デフォルトの名無しさん
2007/11/11(日) 22:25:40IThumbnailProviderからもってくるとキャッシュみないよね?
0130129
2007/11/12(月) 00:26:45IShellItem.BindToHandler経由でIThumbnailProviderからサムネールもってくるとキャッシュみないよね?
0131129
2007/11/12(月) 02:14:14LocalThumbnailCacheでnewしてやればいいのね
ほんとのところCOMを理解してないけど
キャッシュ見るようになって動画のサムネイル早っ
0132デフォルトの名無しさん
2007/11/13(火) 23:58:24おっそろしい程に参考になる本とかWEBページとか少ないな
ボチボチ進んでるから、なんとかなるとは思うけど、自力で探るのはめんどい
0133デフォルトの名無しさん
2007/11/16(金) 02:04:590135デフォルトの名無しさん
2007/11/16(金) 02:16:20http://www.ascii.co.jp/pb/bookmart/pdf/47561/4756130666.pdf
直接の役には全然役に立たないよ
でもこれ読む前はなんでCOMがこんなことになってるのか全然わかんなかった
0136デフォルトの名無しさん
2007/11/16(金) 02:28:35ありがとう。
読んでみる。
0137デフォルトの名無しさん
2007/11/17(土) 02:14:16マニフェスト的なものをヘッダに持って
どう実現するかは知らんけど
0138デフォルトの名無しさん
2007/11/17(土) 03:36:51XP以降ならマニフェストでサイドバイサイドできるよ。
0139デフォルトの名無しさん
2007/11/21(水) 00:20:030140デフォルトの名無しさん
2007/11/21(水) 00:48:55_com_ptr_t
0141デフォルトの名無しさん
2007/11/22(木) 00:08:27海外のライブラリでそれできるやつあるよ
0142デフォルトの名無しさん
2007/11/23(金) 01:44:45ttp://www.ailight.jp/blog/sha256/archive/2005/03/29/5437.aspx
0143デフォルトの名無しさん
2007/12/02(日) 02:36:38VisualStudio2005でATLの「実行可能サーバー」を生成すると
ソースが書籍のサンプルと全然対応しなくて困っております
今の開発環境でCOMの学習用にいい書籍とかありますでしょうか?
■ このスレッドは過去ログ倉庫に格納されています