1 :
デフォルトの名無しさん :
2000/12/29(金) 03:53 MSのテンプレートライブラリであるATLとWTLについて語るスレッドです
2 :
名無しさん23 :2000/12/29(金) 04:12
WTLは、ATL作った奴らが過剰な自信と暇つぶしのために作った ものだと漠然と思ったりするのですが、どうなんでしょう?
3 :
デフォルトの名無しさん :2000/12/29(金) 04:14
WTLがどういう経緯で作られたかは知らんが、MFCよりはるかにマシなライブラリであることは事実なのでありがたく使いましょう。
4 :
名無しさん23 :2000/12/29(金) 04:24
templateという機能は、C++のあり方を変えるんだね。 STLにしてもそうだけど、ライブラリの抜本的な再構築を うながすパワーを持ってる。 まあVisualStudioの次の版に入ってたらいいね。>WTL ちょっと使ってみよう。
とあるWTL MLからの引用。 > I attended the midnight madness at vcdc tonight. Tony Goodhew (sp?) > the product manager for VC++ was there. He was posed the question > about WTL and its future. What he was very clear to state DO NOT USE > WTL. He said that it was a sample app that accidently escaped M$. He > said that he wishes that it would have not left M$ and he is angry > that it got out. He also said that it is NOT supported by M$ or nor > will it ever be. He said that they had no intentions to ever add any > features to it, and that it does not fit into the vision for .NET. > Also he said that eventually ATL will include windowing support, but > it will not be implemented as WTL (implying that he did not like the > way it was done <my interpretation>). Then he repeated about five > times DO NOT USE WTL.
とあるインタビューからの引用。 > Osborn: > On another subject, there seems to be a fair amount of developer > interest in the Windows Template Library (WTL) that Microsoft > released in the latest platform SDK [WTL is a C++ template library > for building Windows applications and is viewed by some > developers as an alternative to the Microsoft Foundation Classes. - > JO]. Does Microsoft have plans to support or add to it? > > Goodhew: > WTL is code that was released unsupported and we have no > intention of updating it. We have no intention of continuing its > availability. Frankly, it should never have been released and it will > be removed from the platform SDK at the time of the next SDK > revision. > > Osborn: > What would you think about an outside group adopting WTL and > maintaining it as an open source development project? > > Goodhew: > Anyone can create his or her own template libraries. There are very > successful third-party companies that market their own template > libraries and their own class libraries for C++. We're not going to do > that. The WTL is something that we are not going to support or > continue at Microsoft.
7 :
デフォルトの名無しさん :2000/12/29(金) 12:49
8 :
デフォルトの名無しさん :2000/12/29(金) 14:34
要するにWinFormsを使えってことか?
9 :
デフォルトの名無しさん :2000/12/29(金) 14:42
逝ってよし!!! > Goodhew
10 :
名無しさん@お腹いっぱい。 :2000/12/29(金) 14:44
調べなくて良かったよ。
はい、このスレ、しゅ〜りょ〜
12 :
デフォルトの名無しさん :2000/12/29(金) 17:15
なんかWTLを応援したくなったよ
13 :
デフォルトの名無しさん :2000/12/29(金) 17:18
応援したいっていうかMFCより速いし軽い
14 :
デフォルトの名無しさん :2000/12/29(金) 21:17
>>5 -6
WTLの作者、Nenad Stefanovic氏のコメントです。
> Those statements were given by Tony Goodhew. He is a program manager in VC
> group and has nothing to do with WTL. Please don't listen to him, he appears
> to have some personal issue with WTL and his behavior is not correct at all.
> It is all crazy, unfortunately.
>
> WTL will not be killed and the new version will ship in the Platform SDK
> soon. It will not ship is VC7, and it will remain unsupported. As for
> windowing in ATL, I don't know when or how will that be added.
new versionってのは3.1のことね。
15 :
14 :2000/12/29(金) 21:28
もう1つNenad氏のコメント。 > I'd like to point out that negative comments about WTL come from one person > (you know who), and not from all of MS. As I said before, WTL will continue > to be available. New version is expected to ship in the Whistler Beta > Platform SDK release. 要するに、Tonyは.NETのマーケティングをやってる人間で、 WTLが注目を浴びてるのが気に食わないのでしょう。
16 :
デフォルトの名無しさん :2000/12/29(金) 21:28
がんばれステファノビッチ
17 :
デフォルトの名無しさん :2000/12/29(金) 21:31
MSって社内でも競争体制取らせてるみたいね。 OfficeもNetdocs(だっけ、Outlook+Wordみたいなもん)と かち合ってるし。
営業部隊と技術部隊の確執ということか? よくあることなんだろうけど、 部外者を必要以上に巻き込まないでほしいね。
19 :
デフォルトの名無しさん :2000/12/29(金) 22:14
全くしょうがねえなー MSにも落とし入れようとする奴っているんだな。 MSも成熟して来たって言う証拠だな。
20 :
デフォルトの名無しさん :2000/12/29(金) 22:19
やなもん見ちまったな
21 :
デフォルトの名無しさん :2000/12/29(金) 22:25
意外な形で盛り上がったな(わら
22 :
デフォルトの名無しさん :2000/12/29(金) 22:42
Tonyの名は一躍有名になったな。 よかったじゃねえか(ワラ
Tony Goodhewって、日経ソフトウェア10月号に出てるぞ。 「C#使え」って勧めてる。(藁
24 :
デフォルトの名無しさん :2000/12/29(金) 23:00
25 :
デフォルトの名無しさん :2000/12/29(金) 23:02
>>24 >C#はVisual CとVisual C++に新機能を付け加えたものだ。
Tonyすげえな(わら
#Visual Cってなに?
26 :
デフォルトの名無しさん :2000/12/29(金) 23:16
しかし、こんな裏事情があったとはね。
>>5 -6,
>>14 -15 も実はM$社員同士の対立だったりして。(w
27 :
デフォルトの名無しさん :2000/12/30(土) 00:00
28 :
デフォルトの名無しさん :2000/12/30(土) 00:57
The Microsoft products listed above do not support the Weitek WTL 4167 chip set. The Weitek WTL 4167 math coprocessor is a set of three chips used as a replacement for the Intel 80387 math coprocessor. Our math coprocessor libraries only support Intel's 80x87 math coprocessors. If you wish to use the Weitek WTL 4167 math coprocessor with a Microsoft compiler, you must obtain a third party library that supports it.
29 :
Weitek WTL 4167チップセットってなに? :2000/12/30(土) 02:42
上に記載されたマイクロソフト製品はWeitek WTL 4167チップセットを支持しない. Weitek WTL 4167数学コプロセッサはインテル80387数学コプロセッサに交換として使用される3個のチップのセットである. 我々の数学コプロセッサライブラリはインテルの80x87数学コプロセッサをサポートするだけである. マイクロソフトコンパイラがあるWeitek WTL 4167数学コプロセッサを使用することを願うならば, あなたはそれを支持する第三者ライブラリを得なければならない.
>28 ワラタ
31 :
デフォルトの名無しさん :2000/12/30(土) 06:58
age
32 :
デフォルトの名無しさん :2000/12/30(土) 13:38
WTLをSDKでは無く、VC++に入れるべきだとする意見もあるようだな。
33 :
デフォルトの名無しさん :2001/01/03(水) 16:19
う〜む。
35 :
デフォルトの名無しさん :2001/01/04(木) 01:37
36 :
デフォルトの名無しさん :2001/01/07(日) 04:32
age
37 :
デフォルトの名無しさん :2001/01/11(木) 11:24
38 :
デフォルトの名無しさん :2001/01/11(木) 12:32
>>37 の内容
Tony said:
"WTL is a totally unsupported sample. Microsoft recommends that you do not use it. "
相変わらずだな、Tony
39 :
デフォルトの名無しさん :2001/01/19(金) 11:02
40 :
デフォルトの名無しさん :2001/01/19(金) 14:50
Microsoftの良くやる手口ですね、、、って自社製品にまで使ってどうする・・・
41 :
デフォルトの名無しさん :2001/01/19(金) 15:03
TonyはなにをそんなにWTLを嫌ってるんだ? もしかして、.NETとかみ合わないから? じゃあ、なぜWTLは.NETでサポートできないんだ?
42 :
デフォルトの名無しさん :2001/01/19(金) 17:08
だれかTonyに Why do you dislike WTL? と言ってやれ。
43 :
デフォルトの名無しさん :2001/01/19(金) 22:11
Tonyもまさか、こんなところでたたかれているとは知らないだろうな。
44 :
デフォルトの名無しさん :2001/01/19(金) 23:48
Tonyはドキュソ決定
45 :
デフォルトの名無しさん :2001/01/25(木) 00:44
Tony=MSの総会屋(笑
47 :
デフォルトの名無しさん :2001/01/30(火) 14:34
勉強を始めたばかりです。 こんな感じて試験的に作ったオブジェクトを class ATL_NO_VTABLE HogeImpl : public CComObjectRootEx<CComSingleThreadModel>, public CComCoClass<HogeImpl, &CLSID_Hoge>, public IDispatchImpl<IHoge, &IID_IHoge, &LIBID_TestActiveX> { public: HogeImpl(){} DECLARE_THREADING_MODEL(otApartment); DECLARE_PROGID("TestActiveX.Hoge"); DECLARE_DESCRIPTION("実験"); BEGIN_COM_MAP(HogeImpl) COM_INTERFACE_ENTRY(IHoge) COM_INTERFACE_ENTRY2(IDispatch, IHoge) END_COM_MAP() }; 親の公開されたメソッドから作成したいのですが STDMETHODIMP TTestActiveX::NewHoge(IHogePtr* hoge) { ここにどう書けばいいでしょう? }
48 :
47 :2001/01/30(火) 17:38
MSDNのDrGUIから >ATL でよく発生するエラーには、実装したクラス(HogeImpl)を対象に new を呼び出してオブジェクトを作成しようとした場合があります。この場合は、奇妙なエラーが発生して失敗します。オブジェクトを作成するには、CoCreateInstance を使用してください。 をやっと見つけました。 しかしCoCreateInstanceとは何ぞや? 先は長いかなぁ
50 :
47 :2001/01/30(火) 19:34
>>49 い〜じ〜わ〜るぅ〜ん
*(void **)hoge=NULL;
HRESULT hr=CoCreateInstance( CLSID_Hoge,NULL,CLSCTX_ALL,IID_IHoge ,(void **)hoget);
でとりあえずエラーは出なくなった
51 :
47 :2001/01/30(火) 20:32
HogeInp1 クラスに TTestActiveX *Parent; をpublicで追加して STDMETHODIMP TTestActiveX::NewHoge(IHogePtr* hoge) { *(void **)hoge=NULL; HRESULT hr=CoCreateInstance( CLSID_Hoge,NULL,CLSCTX_ALL,IID_IHoge ,(void **)hoget); (*hoge)->Parent=this; return S_OK; } とかやりたいのだけど当然ダメだ。しょうがないから STDMETHOD(SetParent(TTestActiveXPtr obj)); を HogeInp1に追加して (*hoge)->SetParent(this); にしたら良さそうと思ったが HogeImp::SetParent(TTestActiveXPtr obj) { /*もしかしたら参照カウンタをインクリメントする必要があるかもよ */ } とコメントがある。 ん〜? という事はここでAddRefして IHogeが消えるときにReleaceすべきなんだろうか? いやでも、それは勝手にATLがやってくれてないの?
52 :
47 :2001/01/30(火) 20:35
>いやでも、それは勝手にATLがやってくれてないの あ! いや、かってにやってくれるのは IHogeの参照についてか! という事はやっぱり AddRef/Releaceは要るんだろうな
53 :
47 :2001/01/30(火) 20:39
なんかなあ、C++Builderってのが失敗かなあ Delphi本にはATLの説明ないし ActiveX本は3冊買ったけどMFCとセットだもんだからさっぱり判らん
CoCreateInstanceとは何ぞやとか言ってるようでは、 開発環境云々以前の問題だろ。 ATL使いたいならATLの本買えよ・・・。
55 :
デフォルトの名無しさん :2001/01/30(火) 22:16
C++ BuilderでATLつかえるんだ。
56 :
47 :2001/01/31(水) 08:48
>>54 ATLを使いたいというより、自動的に吐かれたATLコードが判らん状態
ActiveXを使うだけなら貼り付けるだけなのでCoCreateInstanceは始めて
見たのじゃ そう責めないでおくれよ。これから勉強するから
>>55 カタログにはMFCも使えるとあるんだけど、よく判らん
買ったActiveXにあるATLコードに 自動作成されたコードが とても似て
るからATLなんだろうと思ってるんだけど、そもそもそれが勘違いなのかも
57 :
>>56 :2001/01/31(水) 12:26
CComPtr等のスマートポインタを使えば、AddRef等考えなくていいんじゃ〜
58 :
デフォルトの名無しさん :2001/01/31(水) 13:15
CComPtrつかえねぇーよー とくにこれは極悪すぎ。 T** CComPtr::operator&() なんでoperator&の戻りがT**なんだ? 普通、こんなoperatorをしかもうそつき戻り値でオーバーロードしねーぞ >>MS
59 :
デフォルトの名無しさん :2001/01/31(水) 15:09
>>51 普通、インタフェースを渡す側がAddrefして、
受け取った側はAddrefされていると思って使う。
いらなくなったらReleaseする。
QueryInterfaceが典型的な例だね。
60 :
デフォルトの名無しさん :2001/01/31(水) 16:16
>>58 じゃ_com_ptrをつかえよ。
それがいやじゃったら、使うな。
61 :
47 :2001/01/31(水) 16:40
>>57 いや、だからまだMFC判らんのよ
>>59 なるほど。しかし渡す側が自分なものだからややこしい
自分で自分をAddrefしてから渡せばいいのか?
DelphiだとActiveXでも普通のフォーム使うのと変わらん簡単お手軽なのに
C++Builderだとなんかラッパと2つに分かれているからワケワカ状態
Implが付いてるかだけで同じソース上に混在するから、
m_VclCtlからラップ元を辿ればいいといってもさ、すぐ頭が混乱
ダメだな-->自分
62 :
デフォルトの名無しさん :2001/01/31(水) 18:23
63 :
デフォルトの名無しさん :2001/02/02(金) 13:18
こんにちは、私もATLを使わなければなりません さて、Webページからファイル(データ)を引っ張って来たいの ですが、どうすればいいでしょう? <PARAM >タグとかで指定 されたファイルを落として来たいのです。 キーワードの一部でもご指導願えれば有り難いです
64 :
デフォルトの名無しさん :2001/02/02(金) 17:36
65 :
63 :2001/02/02(金) 21:09
ありがとうございます。まだ何の事か判りませんがそれを手がかりに早速調べてみます。
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