66 :
デフォルトの名無しさん:2001/02/03(土) 00:06
>>58 なんで、ってそりゃIAudioMediaStream::CreateSampleみたいなのがあるからだろ。
たしかに凶悪だが、うそつき戻り値、っていわれるほどひどくはないと思うぞ。
CComPtr自体をT*だと思えってことなんじゃないの。
もしかして T& CComPtr::operator*()なんじゃない?
68 :
デフォルトの名無しさん:2001/02/04(日) 21:35
CComPtrオブジェクトのアドレスを得たい場合はどうすればいいの?
69 :
デフォルトの名無しさん:2001/02/04(日) 23:31
>>68 よく知らんけど、それ多分スマートポインタでしょ?
CComPtrオブジェクト自体のアドレスなんかなにに使うんだ?
多分operator->()とかoperator=()とかもオーバーロード
掛かっていて、自身をT*と同じように扱えるのがスマート
ポインタの存在意義だと思うんだけど…
class Hoge{
public:
void func(){//何か実装}
}
CComPtr<Hoge> a = new Hoge();
a->func();
多分こんな風に使うんでしょ?
つうか、こんなパターン覚えなよ。OOPやってるなら基本だよ。
>>39 COM じゃ new 使えない。出力変数でやるから。
戻り値にポインタ返すスタイルじゃない分、
やや面倒というか美しくない。仕様だけど悲しい。
71 :
デフォルトの名無しさん:2001/02/05(月) 01:19
あ、それ、俺もはまったことあるわ。
こんなことしようとして。
std::list<CComPtr> advsd_list;
ATLのイベントシンクがトホホなんもんで
std::listを使ってイベントシンクを自前で実装しようとしたらコンパイルエラーの嵐。
理由はSTLが T* T::operator&()を前提にしているから。(普通そうだよな)
しょうがないから自前でoperator&をオーバーロードしない、com_ptrを作っちゃったよ。
72 :
デフォルトの名無しさん:2001/02/07(水) 09:42
ATLのコーディングスタイルってヘッダファイルに関数の実装を強要してくる部分があるんですが、これって違和感ないですか?
テンプレートクラスなら止むを得ないのですが、ユーザがコーディングする関数はテンプレートではないので意味無いし
インライン展開を期待しようにも、virtualをインライン展開してもしょうも無い。
ヘッダ直すとインクルードしているソースすべてコンパイルしなおさなきゃいけない。
唯一利点は宣言と実装が一まとめなので手間が省けるくらいかな。
あまり意味を感じないので手直しで.cppソースに書くようにしています。
みなさん、どうしてます?
73 :
デフォルトの名無しさん:2001/02/07(水) 10:40
>>4 | templateという機能は、C++のあり方を変えるんだね。
| STLにしてもそうだけど、ライブラリの抜本的な再構築を
| うながすパワーを持ってる。
そして、プログラマは新たなお約束事に従い、新たなC++を覚えてゆく。
いままで培ってきたノウハウを活かすことができず、試行錯誤する。
プログラマは自身の経験を「継承」することができず、段階的に次に進めない。
これでよいのか?
74 :
ななし:2001/02/07(水) 13:13
これでよいです。元は悪く、今が良いからです。
これほど改善された言語はないとおもふ。
75 :
>71:2001/02/10(土) 21:00
CAdapt
76 :
デフォルトの名無しさん:2001/02/10(土) 23:37
>>73 MFCに未来があればいいが、全くないぞ。
まぁ、WTLもないけどね。
77 :
デフォルトの名無しさん:2001/02/11(日) 21:26
WTLって使ってる人少ないの?
全然スレッド育たないね。
78 :
デフォルトの名無しさん:2001/02/11(日) 22:36
VC++にデフォルトで入ってないしね。
# しかも(MS内部の勢力争いのおかげで)今後も入る事はなさそうだし
79 :
デフォルトの名無しさん:2001/02/13(火) 12:19
>71
その戻り値仕様、実は MS の STLつぶしだったりするかも。
80 :
デフォルトの名無しさん:2001/02/14(水) 04:33
STLにもauto_ptrってスマートポインタがあるがこれもSTLには馴染まない。
みなさん、いつまでも面倒くさいだけの生産性の低い方法で、
高度なことしてるんだという気分に浸ってATLやWTLをやっていてください。
82 :
デフォルトの名無しさん:2001/02/18(日) 22:04
VBチュウボウがあらわれた!
どうする?
83 :
デフォルトの名無しさん:2001/02/19(月) 00:05
宿題済ませて早く寝ろ
86 :
デフォルトの名無しさん:2001/02/19(月) 13:35
取りあえずATLも面倒すぎるから消えそうな感じやね。
JavaBeans や Delphiのコンポーネントぐらい簡単に作成できないと
広く普及しないんじゃないのかな?
87 :
デフォルトの名無しさん:2001/02/19(月) 14:03
いや、ATLは残るだろ。
何かそんな事何かの記事に書いてあったよ。
>87
どうかな?
まあ、ATL Serverまわりはしばらく安泰だろうけど。
89 :
デフォルトの名無しさん:2001/02/19(月) 15:11
ATL7.0
90 :
デフォルトの名無しさん:2001/02/23(金) 16:03
91 :
デフォルトの名無しさん:2001/03/25(日) 05:26
ひさしぶりにageてみよう
VS.NETでAttributeを使ってみたけど、すごく便利だね。
でも、時すでに遅しという感じもする...。
93 :
名無しさん♯:2001/03/27(火) 11:59
94 :
デフォルトの名無しさん:2001/03/27(火) 15:17
はて?ATL/WTLで .NET っつーことは・・・
COMコンポーネントがCLR対応になる???よくわからん
95 :
デフォルトの名無しさん:2001/03/27(火) 18:58
COMコンポーネントの実装/利用がCLRでも問題ないですよ。
VB.NETでCOMコンポーネントをつくる/つかうとなると、他に選択子がないです。
96 :
94:2001/03/27(火) 20:21
>>95 COMもCLRも抽象化層ですよね?
両方使う意義が理解できなくて混乱してます。はて????
97 :
95:2001/03/27(火) 21:43
COMは抽象化(?)インタフェースでCLRは抽象化実装ということでは?
たとえばIStreamがデータを保存する先はファイルかもしれないし
ソケットかもしれないし、人間の胃袋かもしれない。
だけどどっかに保存するための抽象化されたインタフェースでしょ。
CLRはCLRをサポートするどのような実行環境でも実行できるよう
実装を抽象化しているんでしょ?
CLRで実装されたIStreamがファイルに保存するよう実装されていれば
CLRをサポートする実行環境でファイルに保存できる。
ソケットに保存するよう実装されていればソケットに保存できる。
胃袋に保存するように実装されていれば胃袋に保存できる。
そういうことでは?ちがう?
98 :
94:2001/03/29(木) 20:53
>>97 ふーむ。なんとなくわかりました。
ただそこまで抽象化するとOS(Windows)なんて必要ないような気がしますね。
CLR使えばWinAPIが必要ないわけですし。
99 :
デフォルトの名無しさん:2001/03/30(金) 18:00
あぎょ
100 :
はじめまして:2001/03/30(金) 19:29
>98
OSなんて関係ないのをねらいにしているのでは?
もうすぐ64BitOSも出るでしょうから、その場合の移行をスムーズにするため
とも考えられます。
リコンパイルしなくても動作するように....
101 :
デフォルトの名無しさん:2001/03/30(金) 21:15
違います、プロセッサの違いなんて関係ないのを狙っています。
すべてのプロセッサをMSの支配下にしようという魂胆です。
102 :
デフォルトの名無しさん:2001/04/04(水) 02:31
age
104 :
デフォルトの名無しさん:2001/04/09(月) 14:22
106 :
デフォルトの名無しさん:2001/04/09(月) 21:15
107 :
デフォルトの名無しさん:2001/04/10(火) 13:56
COM のクライアントで
for ( ; ; ) {
try {
IDTestPtr testPtr( _uuidof( Test ) );
ret = testPtr->method( arg1, arg2 );
cout << "1" << endl;
} catch ( _com_error &e ) {
}
cout << "2" << endl;
}
こんな感じのコードで試しているのですが、何回かループ回った
あと、 "1" を出力して止まってしまいます。
IDTestPtr かその継承元のデストラクタで止まっているという
ことなのでしょうかね? と、した場合にそれはどういった原因
が考えられるでしょう?
IDTestPtr testPtr( _uuidof( Test ) );
はループの外に出しといたほうが生成/破棄の無駄がないのかなぁ?
>>107 IDTestPtr testPtr( _uuidof( Test ) );
ここが DCOM だったりした場合は、こんな風にループで
回すと接続に使う経路でポート番号とかを使い尽くして
止っちゃう可能性があると思う。どう止るかまでは知ら
ないけど。
ループの外に出せるならもちろん出しておいたほうが良
いに決まってると思う。ていうかそんなこと聞くなよ〜。
109 :
デフォルトの名無しさん:2001/04/27(金) 06:16
gccやBCCでATL/WTLって使えるのかな?
それ以前に、WTLはあるけど、ATLが手に入らない・・・。
gcc,bccはよくわからないが、classとuuidの関連付けをするための
機能がコンパイラにないとつらいと思う。
111 :
名無しさん♯:2001/05/09(水) 10:02
112 :
age:2001/05/24(木) 13:19
age
113 :
デフォルトの名無しさん:2001/06/13(水) 13:35
age
114 :
デフォルトの名無しさん:2001/06/16(土) 01:07
浮上
sage