WTLのバージョンがあがったのに話題にもなりませんかそうですか・・・
WTLのスレは別にあるんで
2005BetaにはもうATL8.0付いてるの?
ちょいと聞きたいんだけど MFCではメッセージハンドラ内で投げられたCException例外は ハンドラ内でcatchしなくてもフレームワークがcatchしてメッセージBOXを出してくれますよね。 それと同じ様に、ATLでもハンドラから漏れ出た例外をcatchしたいのです。 とりあえず今はBEGIN_MSG_MAPとEND_MSG_MAPをコピペして try, catchを追加した独自のマクロを使ってますが… もっとスマートな方法は無いでしょうか?
>>930 template <class T>
class CExceptionCatcher
{
public:
static LRESULT CALLBACK WindowProc(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
try
{
return T::WindowProc(hWnd, uMsg, wParam, lParam);
}
catch (...)
{
...;
}
return 0L;
}
};
なんてのを継承するのはどう? WindowProc を持っているクラスを判断してテンプレートパラメータに
しなきゃいけないところがなんか泥臭いけど・・・
>>931 ありがとうございます。
いいかも、と思ったのですがCWindowImplBaseT<>::WindowProcを見てみると
例外のこと考慮されてないっぽいのでなんか危なそうです。
できればProcessWindowMessageから外に例外を出さないようにできないかなと考えて思いつきました。
#define MSG_MAP_TRY try {
#define MSG_MAP_CATCH(type, func) \
} \
catch(const type& e) \
func(e); \
}
BEGIN_MSG_MAP(theClass)
MSG_MAP_TRY
// この間のハンドラで起きた例外をキャッチする
MSG_MAP_CATCH(std::exception, ExceptionFunc)
END_MSG_MAP()
WSHのGetObject 関数みたいに 未登録コンポーネントのインスタンスを作成する方法はありますか?
934 :
デフォルトの名無しさん :04/07/25 15:39
あげとこう。
MFCもATLも最近始めたばっかりなんだがどう使い分けたら いいのかサパーリわからん。
ATLで開発するときに、MFCは絶対使わない前提ですが GDIのAPIなんかをいちいちSTLでラップしてますか? あ・漏れはめんどくさいからしません。 最近、10年前のWindows API(16ビット)サンプル多数つきの本が すごく役にたったりしてます。
WTL。
STLでラップって何よ
>>936 CDC とか使うか?って話?漏れは使ってない。
使う価値がたいして感じられないから。
しかし CHandle なんかは C++ 特有のスコープ外れたら
破棄されるあたりが便利なので使ってる。
いちいちラップとか書いてるから、CDCも知らないんじゃ
DrawTextでストリングクラスを受けたりするかってことじゃないのか
あぁ、STLでラップってstd::stringで受けられるようにするって意味か。
なるほど。でも STL でラップしたい関数(群)ってそんなにあるかな? 文字列はどっちかっていうと CComBSTR 使ってるし・・・
俺もCStringで足りるなぁ。 どうせstring(CStringでもいいけど)を引数に使うメリットったって、 文字数を関数に渡さなくて良いとかその程度だべ?
GUIアプリあまり作らない人間にとってはstd::stringの方が馴染み深いと思う
でもそれだけのためにいちいちラップっていうのも。 俺ならc_strでいいやと。
System.Stringでいいやと。
おじさんつまんなーい。
951
STLでラップって、少々言い方が悪かったです
HDCに関わる操作クラスを自作する。テンプレートクラスとかのSTL
機能も利用して再利用可能なクラスを作る。って事をしたほうが合理的か
どうかって事を聞きたかったのです。
>>940 CDCって、MFCをインクルードしたプロジェクトで有効でしょう?
MFCは使いたくないのでAPIごりごりなわけじゃないですか
やっていて、自分なりの結論としては、とりあかずAPIごりごりが
正解な気がします。これで動作したら後々クラス化できると思うし
> テンプレートクラスとかのSTL 機能 用語の使い方がおかしい。 > CDCって、MFCをインクルードしたプロジェクトで有効でしょう? なんども言われているが、WTLにすでにある。
やっぱりただの無知だったのか
>>955 行ってきましたがこれを学習するよりも
API直書きのほうが効率が良いと思いました。
>>956 マテマテ。
WTL くらいは使っても良いと思うぞ。メッセージマップとか。
その辺だけならドキュメントを1時間も読めば使えるだろうから、
「学習する」って程のものでもないし。
皆につっこまれて意地になってるだけだろ。
いえいえ、
>>958 意地になってなんかないですよ
実装が既に終わりましたので。次回の機会に使わせてもらいます。
ところでVC++6とVC.NETで同じソースをビルドするとして VC++6(SP6)プロパティページダイアログの動作が怪しいなんて事ありませんか? .NETビルドのATLはVB6には貼れない VC++6ビルドのATLは.NET VBに貼れる 互換性についてのドキュメントってどこにあるのでしょうか? 教えて君でスマソ
日本語がめちゃくちゃだな
なんか言うばかりでレアな実装している人はいないんだな
また俺語ですか<レアな実装
レアな実装とは、往々にしてアレな実装である
IWebBrowser2 についてお聞きします。 Navigate 先を about:blank にしメモリ上の HTML を表示する、 という処理は書けたのですが、この HTML 内にある、 相対リンクがどうにも意図どおりに解釈されません。 具体的には ・外部スタイルシートを実行ディレクトリからの 相対URL指定しても無視される。 ・この文書内のアンカーへまともに飛べない。 #some_where に行こうとすると about#some_where なる何も無いページを表示する と言った症状です。 普通にテンポラリファイルに書き出して、 サクっと読み出すのが吉なんでしょうか?
967 :
デフォルトの名無しさん :04/08/14 22:12
あげとこう。
>>966 IObjectSafetyを実装して、INTERFACESAFE_FOR_UNTRUSTED_CALLER と
INTERFACESAFE_FOR_UNTRUSTED_DATA あたりはサポートした?
あと IPersistPropertyBag は、キミの追加したプロパティの保存と読み込みを
勝手にサポートしてくれたりは「しない」から、ちゃんとBEGIN_PROP_MAPとか
使ってプロパティを登録してあげる必要があるけど、これはやってますか?
すいません、自己解決しました
public IPersistStreamInitImpl<CMyCtrl>,
public IPersistPropertyBagImpl<CMyCtrl>
COM_INTERFACE_ENTRY_IMPL(IPersistStreamInit)
COM_INTERFACE_ENTRY_IMPL(IPersistPropertyBag)
COM_INTERFACE_ENTRY_IMPL_IID(IID_IPersist, IPersistPropertyBag)
を追加することで解決することができました。
参考ページ
ttp://www.faqchest.com/msdn/ATL/atl-97/atl-9710/atl97100800_09033.html お騒がせしました。
>>966 返信ありがとうございます。
>IObjectSafetyを実装して、INTERFACESAFE_FOR_UNTRUSTED_CALLER と
>INTERFACESAFE_FOR_UNTRUSTED_DATA あたりはサポートした?
INTERFACESAFE_FOR_UNTRUSTED_DATAはサポートしていませんでした。
パラメータの安全性が保障されるとの事なので追加したいと思います。
>あと IPersistPropertyBag は、キミの追加したプロパティの保存と読み込みを
>勝手にサポートしてくれたりは「しない」から、ちゃんとBEGIN_PROP_MAPとか
>使ってプロパティを登録してあげる必要があるけど、これはやってますか?
確認したところ、やってありました。
>>968 すいません、アンカーミスです
968さんありがとうございます
971 :
デフォルトの名無しさん :04/08/28 12:43
あげとこう。
ATLはキモイな。
内容がな(ry
内容がなんと水鳥拳
976 :
デフォルトの名無しさん :
04/09/11 14:53:27 あげとこう。