07/03/10 19:28:49
なんでだろ・・・
解決したら報告します。
51:デフォルトの名無しさん
07/04/13 18:44:41
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCΟMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOM
COMCOMCOMCOMCOMCOMCOMage
52:デフォルトの名無しさん
07/04/16 19:50:58
ATLの属性をつかってテキストで簡単にCOMを作るチュートリアルやってみたが、
あれATL7.0じゃないと動かねーじゃねぇか
53:デフォルトの名無しさん
07/04/25 18:19:04
ネットの情報だけでCOMサーバを勉強するのって無理ある?
MFCでコントロール作ってそれをコンテナに組入れるのはやったことあるけど
ATLで見えないWinsock+COMサーバ.exeに挑戦中でCOMとソケット通信をどのように
連携すればいいのかで色々悩んだ。
結局ウィンドウメッセージとグローバル変数を駆使してなんとか目処がついた
けど、もっとスマートなやり方が載ってる参考書はないんでしょうか?
54:デフォルトの名無しさん
07/04/26 12:40:13
>>53
ウィンドウを持たないCOMオブジェクトで、Winsockの非同期やるんなら、イベント使った方が
良いと思う。
55:53
07/04/26 18:32:04
>>54
ありがとう。
>イベント使った方が良いと思う。
のイベントとはウィンドウメッセージとの理解でよいですか?
もう一点教えていただきたいことがあるのですが、
ブラウザに貼り付けたコントロール(ocx)からATLで作ったCOMサーバ.exeに
Dispatchしてメソッドを呼ぶことができたのですが、
ブラウザを閉じるとCOMサーバ.exeも終了してしまいます。
ブラウザを閉じてもCOMサーバ.exeを常駐させたいのですが
クライアント側/サーバ側どちらで対応すればよいのかさえ検討がつきません
どのようにすればよいかご存知でしょうか?
56:デフォルトの名無しさん
07/04/26 19:14:00
よくない。WSAEventSelect使えって話でそ。
57:53
07/04/26 23:21:36
>>56さん 了解です。
引続き>>55についてご存知の方お力を貸してください。
お願いします。
58:デフォルトの名無しさん
07/04/27 10:49:59
DLLに汁
59:デフォルトの名無しさん
07/04/28 18:07:15
DCOMの実装に関する参考書や参考サイト知りませんか?
60:デフォルトの名無しさん
07/04/28 18:31:14
↑クライアントとサーバ両方の実装についてです。
言語は問わないのですが、できればVCについてお願いします。
61:デフォルトの名無しさん
07/04/29 02:27:45
>>51
なにぃっ、Mageだと!?貴様鉄道板住人だな!
62:デフォルトの名無しさん
07/05/03 12:01:20
COMスレってなんでこんなに過疎ってるの?
それについて議論しよう
63:デフォルトの名無しさん
07/05/03 12:01:47
ネットでCOMについて記述してるサイトもあんま見ない
64:デフォルトの名無しさん
07/05/03 12:35:53
COMに比べると似たようなことはドトネトの方が簡単にできるから
もう存在意義がなくなってんじゃないの?
65:デフォルトの名無しさん
07/05/03 12:38:08
COMを使う舞台がエクセルVBAなんかに移ってるからな
66:デフォルトの名無しさん
07/05/04 00:28:42
なんで?comサーバでの利用機会とか無いの?
アプリ間でデータ交換とか外部アプリへの機能提供とかの場面で利用価値あると思うけど
まあ、代替手段は色々あるし、わざわざムズい技術を覚えてまでcomを利用する必要もないか
特に開発人口が多い業務系開発だったら尚更だな
67:デフォルトの名無しさん
07/05/04 00:43:47
業務系ならなおさら何でもエクセルでやりたがる
もしくはCOBOL
68:デフォルトの名無しさん
07/05/04 14:13:48
PlatformSDKにもMIDLはあることだしSxSアセンブリでのCOMならいくらかハードルも低いし、C++での共有ライブラリ作成という観点でもう少しひろまってもいい気がするんだけどな。
ActiveXでもOLEでもなくDLL+αとしてのCOMっていう観点でさ。
なんにしてもMFCやATLで新しくコンポーネント作るってのはなくなっていくんだろうな。せいぜいVB6でか.NETアセンブリからタイプライブラリ作る位になるのか。
69:デフォルトの名無しさん
07/05/07 18:10:27
ATLでアウトプロセスサーバを作っているのですが、
親ウィンドウのメッセージループから自exe内のCOMオブジェクトを
どのように参照すればよいかわかりません。
マクロで展開されたポインタがどこかにあると思うのですが
どのように参照すればよいでしょうか?
ATL初心者なので質問の表現がおかしいかも知れませんが
よろしくお願いします。
70:69
07/05/07 19:26:22
デバッガで見てみたら
Choge *a=(Choge*)&ObjectMap[n];
で参照できました。
で、いいですか? ←直感的にやったらできたので不安ですが・・・
71:デフォルトの名無しさん
07/05/08 03:09:34
いいよ~いいよ~いいよ~
72:デフォルトの名無しさん
07/05/08 12:19:59
もー。ATLイベントの実装の仕方がいまいちわからん。
73:デフォルトの名無しさん
07/05/08 12:45:22
イベント出す側だったらウィザードが殆どやってくれるからあまり意識したことないけど?
74:デフォルトの名無しさん
07/05/08 13:32:57
イベント出す側なんですが、
クラスビューからメソッドと接続ポイントを追加したんですが
xxxxx.idlとxxxxxCP.hに空のクラスを作るだけで
メソッドの雛形作ってくれないんですよ。
最初のウィザードのときシンプルオブジェクトで作成してるからでしょうか?
75:デフォルトの名無しさん
07/05/08 13:42:03
ATLシンプルオブジェクトを追加するとき"接続ポイント"にチェックいれて作れば
クラスビューに IHoge と Libの下に _IHogeEvents が出来ているでしょ
イベントメソッド追加したければ _IHogeEventsで右クリック - メソッド追加で追加できるよ
メソッド追加した後、実装クラス (CHoge) の方で右クリック - 接続ポイントの追加をもう一回
やるのを忘れんな
76:デフォルトの名無しさん
07/05/08 14:49:43
で、できました。
>接続ポイントの追加をもう一回やるのを忘れんな
もう一回やったらできました・・・なぜもう一回なのかわかりませんか゛
とにかく今日一日試行錯誤していたのが「もう一回」のキーワードで解決しました。
>>75さんになにかごちそうしたい気持ちでいっぱいです。
77:デフォルトの名無しさん
07/05/08 16:24:46
極稀に2chも役に立ったり立たなかったりする
78:デフォルトの名無しさん
07/05/08 17:48:04
もう一役お願いします。
イベントを作成したのですが、イベントがクライアントに届きません。
Fire_Hogeを呼びだすときデバッガで追ったら
int nConnections = m_vec.GetSize(); で0が帰ってきて
その下のループの中のpDispatch->Invokeまでいきません。
ソフトの構成としてはアウトプロセスサーバ.exeからブラウザのjavascriptへイベントを発生したいのですが、上記の通りとなり、イベントを渡すことができませんでした。
m_vecが接続を管理するらしいのですが、javascriptからの接続がうまくないのでしょうか?
接続の方法としては<OBJECT>タグにCLSIDを埋め込むようにしてjavascriptでサーバ.exeのメソッドを呼び出すことは成功しています。
79:デフォルトの名無しさん
07/05/08 18:41:37
javascriptからEventをAdviseしてあげた?
80:デフォルトの名無しさん
07/05/08 20:21:50
>>78
Fire_Hoge()の呼び出しってどうやってます?
多分IHogeの実装クラスCHogeのインスタンスから呼び出してると思いますが、
COMクライアントが作ったCHogeインスタンスから呼ばないとFireできないっす
81:80
07/05/08 20:30:56
補足:
インターフェースをシングルトンにしとけば作成されるインスタンスは必ず一つなので、
いっそシングルトンにしてしまうとか
つ DECLARE_CLASSFACTORY_SINGLETON
ただこれをやると以下の問題も・・・
つ URLリンク(support.microsoft.com)
後は泥臭いやり方しか知らない
82:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/08 21:08:40
>>80のアンカー間違えました。>>79が正解です
84:デフォルトの名無しさん
07/05/08 21:14:49
>>82は>>79に対するレスです。
>>83は誤爆です。
>>80,81
ありがとうございます。
参考にさせていただき再び試行錯誤させていただきます。
85:デフォルトの名無しさん
07/05/08 21:21:59
>>80
書き忘れましたが、Fire_Hoge()の呼び出しはは
ブラウザ(HTMLに記述したjavascript)からCHoge.exeのメソッドを呼び出して
呼び出されたメソッドの中でFire_Hoge()を呼んでいます。