トップページ⇒tech
1001コメント291KB

■MFC相談室 mfc11.dll■

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/

関連リンクは >>2-10 の辺り。
0488デフォルトの名無しさんNGNG
>>487
CodeGuruに行くとそういうサンプルが少なくとも二つは見つかるよ。
#つーか、見つけた。
OwnerDrawじゃなくてCustomDrawの手法ならGoogleで国内サイトを探すだけでいろいろ出てくると思う。
0489デフォルトの名無しさんNGNG
今から始めるならMFCはやめて.NETにしたほうがいい?
0490デフォルトの名無しさんNGNG
>>488
ありがとうございます。
とりあえず、CodeGuruから調べてみたいと思います。
0491デフォルトの名無しさんNGNG
俺はCodeProjectの方が好きだな・・・
0492デフォルトの名無しさんNGNG
CodeGuruはリニューアルしてから見づらいな・・・
0493デフォルトの名無しさんNGNG
>>489
「今から始める」という意味が「学習を始める」だったらMFCで良い。
「長大なプロジェクトを起こす」という意味なら.netを考慮する価値はあるかも。

つまりちょこちょこ作って今すぐ広い環境で動かすならMFCだな。
0494デフォルトの名無しさんNGNG
>>493
あー。まだ厨房なんで将来的なことも考えていただければ幸いです。
0495デフォルトの名無しさんNGNG
>>494
んじゃまず、ハードの基礎やってから、アセンブラ逝け。1年たったらまた恋。
0496デフォルトの名無しさんNGNG
漏れは、SDK だけでアプリ作れない香具師の MFC アプリは信用しないなあ。

……「アセンブリが解らない香具師のアプリは信用しない」と同じレベルかゴメンorz
0497デフォルトの名無しさんNGNG
何でもそうだが、知ってるやつ見えてるやつから見ると、知らないやつ見えてないやつは、危なっかしく感じる。
知らないやつ見ててないやつ自身は、なんの恐れも不安もない。
0498デフォルトの名無しさんNGNG
えーと、分裂症の方でしょうか?
0499デフォルトの名無しさんNGNG
SDKやってMFCすれば〜
0500デフォルトの名無しさんNGNG
MFCだかVBだか知らないんだけど、例えば某USB機器に付属してるソフト。
起動してすかさず他アプリケーションを前面に持って来て、
そのソフトが完全に起動し終わったのを確認してウィンドウをアクティブにすると
フッと、ウィンドウ上のボタンのフォーカスが切り替わる。
細かい事だけど、何やってんだよ (;´Д`) 怖いよ
0501デフォルトの名無しさんNGNG
レベルが低くて本当にこれから始めるっていうならなおさら、あんまり先のことは
考えずに、今できることをやって経験を積んでおくことを薦める。先々どうするかは
自分で経験して判断できるようになってから決めればよい。何もできないうちに
後のことを言っても始まらないからね。

現在一般に出回ってるシステム環境や、ツール、学習面での文書のこと考えたら
いきなり.netはやりづらいと思う。どうせ最初は小さいものしか作れないんだし、
何かしら使える機能のあるものを気軽に作って、プログラムすることの手順に慣れ
るのが先だろう。
0502489NGNG
一応Delphiとかはいろんなページ見ながらやってたんだけど
他の言語に移行したくなったんで、.NETかMFCがいいかなーと思ったたけです。
別にJavaやSDKでもいいんですが、アセンブラは必要なんでしょうか?
0503デフォルトの名無しさんNGNG
そんな「なんとなく」が理由なら自分で好きなのやれ。
0504デフォルトの名無しさんNGNG
>>502
必要って何のために?

仕事で必要かどうかは内容次第で、
具体的な就職先と配属先が決まらないと何とも言いようがない
けど、そんな理由に引きずられるだけな若手は「うちへ欲しい」タイプじゃない
泥縄方式のおんぶに抱っこで何ができるか甚だ疑問だからだ

言語であろうとデバイスあろうと、
特定のブツに対するマニュアル的な知識は泥縄でも徹底的ならそれでいい
もっと根本的なことで、こういう分野を切り開いていくことに対して
自発的な意思で行動しているか否かが肝心要の核心だ

で、アセンブラの話に戻ろう
アセンブラやってみたいか? 意味ねえと思うか?

おまえが答えるしかないことだ
0505489NGNG
>>504
アセンブラはやってみたくないけど、意味はあるとおもう。
既存の高級言語を使う場面とアセンブラを使う場面はどう違うのか説明してくれ。
0506デフォルトの名無しさんNGNG
>>505
特定のCPUの、特有の機能を使うとき
例: 特権命令

コードサイズまたは実行速度に定量的な条件があるとき
例: PIC
0507デフォルトの名無しさんNGNG
>>505
続き

既にアセンブラベースで進行中のプロジェクト
例: (軍機のため言えません)
0508デフォルトの名無しさんNGNG
最初にDelphiやると他のものが使えなくなってしまう。
そういう意味では最初に学ぶのはDelphi以外が良いと言うことになるのかも知れない。
0509デフォルトの名無しさんNGNG
>>502
> 一応Delphiとかは

「とか」ってなんだよ・・・
なんかこういう書きぶり続くとどうでも好きにすればとしか言いようないな
0510デフォルトの名無しさんNGNG
普通にCかC++から初め野菜って事で
0511デフォルトの名無しさんNGNG
>>508は典型的なマニュアル頭な人に多い症例
0512デフォルトの名無しさんNGNG
ここMFCのスレなのにDelphiの話題ばっかりで大丈夫?
他のスレで同じことするとスレ違いとかうるさく言われるのにね。
0513デフォルトの名無しさんNGNG
>>512
代理発言はしてやらない
0514デフォルトの名無しさんNGNG
今更言語談義が始まって呆れてる最中。
0515デフォルトの名無しさんNGNG
>>505
>アセンブラはやってみたくないけど

賛成も反対もする筋合いにないからどっちとも言わないが、
はっきりした意思があるなら邪念は捨てろ
0516デフォルトの名無しさんNGNG
卒業年次生にもなって何屋に【なる】のか決まってないなら
それはそれですることがあるはずだ
0517デフォルトの名無しさんNGNG
MFCなひとは、なんでDelphierや初心者言語話に、普通に答えてんの?
そこはスレが荒れるとこでしょ。やっぱMFCに愛着無いからかね。
0518デフォルトの名無しさんNGNG
単に楽をするためのライブラリィ程度しか考えていないよ、俺は
それと、暇つぶしにレスしているだけ
0519デフォルトの名無しさんNGNG
暇つぶしでスレ違いレスすんなタコ
0520デフォルトの名無しさんNGNG
Cスレで聞こうと思ったのでつが荒れてたので
こちらでおながいします。
MFCを使っているとoperator newをオーバーロード
して、デバッグのときにはメモリリークを検出してくれるので
助かっているのですが、MFCを使用しない場合は
みなさんどうしてますか?
自力でnewをオーバーロードしてるのでつか??
0521デフォルトの名無しさんNGNG
つーか、スレ違いな話題はスールしろよ!
0522489NGNG
>>508
父親にCから始めろと言われ、本を買ってくれたのでCから始めました。

他スレとか見てるとMFCの雲行き怪しげなので.NETにしときます。
スレ違いな質問してすみませんでした。
0523デフォルトの名無しさんNGNG
>>520
そんなギミックに頼るハメになる前に単体テストしとく
0524デフォルトの名無しさんNGNG
>>520
メモリリークを検出するソフトを使う
0525デフォルトの名無しさんNGNG
VC6とVC7の違いについて解説しているページはありませんか?
例えば、VC6のメモリウィンドウは、 VC7ではココにある…etc

最近学習を始めたのですが、VC6のMFC関連のHPを見ていると
どうもVC7と操作性?が違っていて、勉強が進みません。

大変お手数ですが、ご教授をお願いします。

0526デフォルトの名無しさんNGNG
>>524
どんなんあるんか教えろや
0527デフォルトの名無しさんNGNG
>>525
これ俺も欲しい
0528デフォルトの名無しさんNGNG
BoundChecker
Purify
0529デフォルトの名無しさんNGNG
>>520
ここのことでつか?
ttp://mikata.curiocube.com/progtips/ch24_newhandler.html
MFC使わなくても…
0530デフォルトの名無しさんNGNG
MFCのクラス(というかメソッド?)がスレッドセーフか否かはどこで調べれば良いでしょうか。
MSDNには特に記述が無いようですが…
0531デフォルトの名無しさんNGNG
>>530
LIBもDLLもシングルとマルチがある
(つまりマルチならクラス全てマルチ)
0532デフォルトの名無しさんNGNG
MFCで作ったプログラムってMFCランタイムがないと
動かないんですか?
(つりではないです。お願いします)
0533デフォルトの名無しさんNGNG
>>532
スタティックリンクすれ
0534532NGNG
>>533
ありがとうございました!
0535デフォルトの名無しさんNGNG
>スタティックリンクすれ

この一言でわかっちゃうってことは、釣りだろw
0536デフォルトの名無しさんNGNG
VC++のコンパイルエラーなど出す「出力ウィンドウ」のように単純に
1行づつメッセージを出力するためにはどのような手法を使うのが一般的なのでしょうか?
0537デフォルトの名無しさんNGNG
>>536
リストコントロールとか
書き込み禁止のエディットコントロールとか
スクロールビューとか
0538520NGNG
遅れますたm(__)m

>>523
単体テストでリークバグを検出したいのでつよw

>>524-528
やっぱ市販製品でつか...(マニーが...orz

>>529
うーんちょっと違いまつ。メモリ確保失敗というより
リークの検出をしたいでつ。。。


みなさんどうもありがとうございますた。
とりあえず慎重にPGして、ひと山あててBoundsChecker
買うですw
0539デフォルトの名無しさんNGNG
COleDataSource::DoDragDrop() を呼ぶ前に CacheGlobalData() を
2種類のデータ形式で呼び出すと、最初はうまく動作するんですが
一定時間後に E_OUTOFMEMORY で COleDataObject::GetGlobalData() に
失敗するようになります。GetGlobalData() を2度呼び出すのは
間違ってるでしょうか?
0540530NGNG
>>531
ありがとうございます。マルチスレッド版DLLならばスレッドセーフ、ということですね。
http://66.102.7.104/search?q=cache:UuuMyILAJXsJ:www.sabamiso.net/yoggy/tdiary/%3Fdate%3D20030822+cstring+%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%82%BB%E3%83%BC%E3%83%95&hl=ja&lr=lang_ja
など、少し調べた限りではMFCってスレッドセーフじゃない、みたいに書かれているページがいくつかありましたので…

(ちなみに使用したかったのはCFileでした。)
ありがとうございました。
0541デフォルトの名無しさんNGNG
>>520
んなもん買わないでも_CrtSetDbgFlag使えばいいんじゃねーの?
0542デフォルトの名無しさんNGNG
ちょっとよろしいですか?
あるディレクトリ以下のファイル名一覧を取得したいんですが、サンプルをコピーしてみて、できたのですが。
日本語のファイル名だけ取得できませんでした・・・。
CFileFindって日本語は駄目なんでしょうか?
0543デフォルトの名無しさんNGNG
>>542
shiftJISのダメ文字が混じってるだけでは?
ttp://www.kent-web.com/pubc/jcode/
0544デフォルトの名無しさんNGNG
>>543
どうやらそのようでした。ありがとうございました!
0545デフォルトの名無しさんNGNG
すみません。>>530-531あたりを見て思ったのですが、
マルチスレッドのDLLを使えばMFCだろうとCのstrtok関数だろうと全てスレッドセーフになり、
シングルのDLLを使う場合は、スレッドセーフであることが保証されていないので自分で同期取らないといけない、
という理解で良いのでしょうか?

私はてっきりマルチスレッドにするときは何が何でもマルチスレッドDLLを使って、
その上で、スレッドアンセーフなものは自分で同期をとるプログラミングをしなさい、
ということかと思っていました…
0546デフォルトの名無しさんNGNG
スレッドセーフなライブラリは、ちゃんと使えば、スレッドセーフになる。
どんな使い方でもスレッドセーフになるって、魔法のライブラリかよ。
「バグのないライブラリを使うと、バグのないプログラムになる」が否なのに同じ。
0547デフォルトの名無しさんNGNG
当然、スレッドセーフでないライブラリは、マルチスレッドで使うと危険。
ちゃんと同期をとって使っているつもりでも、内部処理や内部エリアで同期がとれていない。
0548デフォルトの名無しさんNGNG
>>545
MFCは同期クラス(CMutexとか)以外はスレッドセーフじゃなかった気がする。
心配ならソース見てみれば?
0549デフォルトの名無しさんNGNG
>>548 はスレッドセーフの言葉の意味自体すら知らない
0550デフォルトの名無しさんNGNG
For size and performance reasons, MFC objects are not thread-safe at the object level, only at the class level.
0551デフォルトの名無しさんNGNG
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_Multithreading.3a_.Programming_Tips.asp
0552デフォルトの名無しさんNGNG
まとめ

シングルスレッド用ライブラリ スレッドセーフではない(マルチスレッドでは使用不可)
マルチスレッド用ライブラリ クラスレベルでスレッドセーフ(マルチスレッドで使用可)

同一オブジェクトに対する別スレッドからのアクセスの同期は
同期オブジェクトを使ってプログラマがとる
0553デフォルトの名無しさんNGNG
CAsyncSocketを使用して書いていますが
どーやって接続先、自分のIPアドレスとポート番号を取得できますか?
0554デフォルトの名無しさんNGNG
>>552
同期クラスは例外で、オブジェクトレベルでスレッドセーフ。
0555デフォルトの名無しさんNGNG
>>552
MFCにシングルスレッド用ライブラリなど存在しない。
シングルスレッド用とマルチスレッド用(スレッドセーフ)があるのはCランタイムライブラリ。
0556デフォルトの名無しさんNGNG
>>553
IPだけでなくネームアドレスも使えるだろ?
ポートは使用するサービスによって決まるもんなんだからあらかじめ決めて動作
させるのがネットワーク・アプリ書くときの前提になると思うが。

何がしたいのか、キミのネットワークの仕組みについての理解度がどれくらいか
よく分からないね。
0557デフォルトの名無しさんNGNG
>どーやって接続先、自分のIPアドレスとポート番号を取得できますか?

自分の方は GetSockName(), 先方は GetPeerName で取れます。
IPv6 対応はそれぞれ GetSockNameEx, GetPrrtNameEx。
0558デフォルトの名無しさんNGNG
指がずれたな(w
0559デフォルトの名無しさんNGNG
>>558
接骨院へ
0560デフォルトの名無しさんNGNG
MFC version 6.0 (still mfc42.dll) Visual C++ version 6.0 シングルスレッド用DLLあり
MFC version 7.0 (mfc70.dll) Visual C++ .NET なし
0561デフォルトの名無しさんNGNG
> 同期クラスは例外で、オブジェクトレベルでスレッドセーフ。
そりゃそうだろ(藁)
0562デフォルトの名無しさんNGNG
>>561
CEvent::SetEventの呼び出しを
Win32の生のクリティカルセクションで同期するバカが実在したりするから
世の中は面白い。
0563デフォルトの名無しさんNGNG
てか、同期クラスはただのラッパーだし
0564デフォルトの名無しさんNGNG
質問です
CDialogBar上にボタンを配置して、それを条件に合わせて、
有効無効の変更を行いたいのですが、何処で行えば良いでしょうか?

MFCのソースを追っている限りでは、コマンドハンドラが存在すると常に有効に
なってしまうように見受けられますが・・・

0565デフォルトの名無しさんNGNG
>>564
コマンドマップに EnableCommandUI だかなんだかを追加するんじゃなかったかな。
0566デフォルトの名無しさんNGNG
>>564
CDialogBar m_wndDlgBar;
....
CButton *pBtn=(CButton *)SubclassDlgItem(IDC_BUTTON1, &m_wndDlgBar);
pBtn->EnableWindow(FALSE/TRUE);

では、だめかな?
0567564NGNG
>>565
>>566
返答有難う御座います
CMainFrameのコマンドマップに
ON_UPDATE_COMMAND_UP( IDC_BTN_XXX, OnUpdateBtnXXX )
を手動で入れてそこで処理させることで実現できました
0568デフォルトの名無しさんNGNG
>>562
すみません、解説お願いします。
(理解できてません…)
0569デフォルトの名無しさんNGNG
>>568
1.「MFCで提供されているクラス、同一のインスタンスへのアクセスはスレッドセーフではない」という話をどこかから聞きつける。
2.そうかそうか、と言って、以下のようなコードを書く

とあるスレッド
EnterCriticalSection( &csEvent1 );
event1.SetEvent(); // スレッドセーフじゃないのでクリティカルセクションで保護
LeaveCriticalSection( &csEvent1 );

別のスレッド
EnterCriticalSection( &csEvent1 );
HANDLE hEvent = (HANDLE)event1; // スレッドセーフじゃないのでクリティカルセクションで保護
LeaveCriticalSection( &csEvent1 );
WaitForSingleObject(, INFINITE);

実際にはもちろんこんな必要はない。
0570デフォルトの名無しさんNGNG
MFCで全角スペースをトリミングしたいのですが
自分でロジック組む以外ないですかね?
0571デフォルトの名無しさんNGNG
ロジックとか言うほどのもんかよ
0572デフォルトの名無しさんNGNG
>>571
君の言うロジックの定義は?
0573デフォルトの名無しさんNGNG
定義とか言うほどのもんかよ
0574デフォルトの名無しさんNGNG
>>573 説明出来ないのか ( ´,_ゝ`)プッ・・
0575デフォルトの名無しさんNGNG
説明とか言うほどのもんかよ
0576デフォルトの名無しさんNGNG
説明とか言うほどのもんかよとか言えるほどもんかよ
0577デフォルトの名無しさんNGNG
ほどもんかよ
0578デフォルトの名無しさんNGNG
ぼぉくほどもん。ターケコープタァー!
0579デフォルトの名無しさんNGNG
CWebBrowserクラスのNavigateで、自前のウィンドウに埋め込みウェブを表示させているのですが
そこのユーザーエージェントを制御したいのですがどうすればよいでしょうか?
教えてください
0580579NGNG
Navigateに与える引数を工夫すれば実現できそうなのですが・・・
どなたかヒントください
0581デフォルトの名無しさんNGNG
夏ですね
0582570NGNG
夏厨が沢山、湧いてますなぁ〜。
無理っぽいので自分で作ります。
0583デフォルトの名無しさんNGNG
>>582
応援してます(はぁと
0584570NGNG
>>583
応援されたので作って見ました。一応、動いてるけど、これでええのかな?

CString s = "うあ ああああ     ";
int c;
int last_pos = -1;
int pos;
int i = 0;

while (i < s.GetLength()) {
   pos = i;
   if (IsDBCSLeadByte(s[i])) {
      if (i == s.GetLength() - 1) {
         c = ' '; // DBCSの先頭バイトだけが最後に残っている場合
         i++;
      } else {
         c = ((BYTE)s[i] << 8) + (BYTE)s[i+1];
         i+=2;
      }
   } else {
      c = s[i];    
      i++;
   }
   if (_istspace(c) || c == 0x8140) { // ホワイトスペースか全角ブランク?
      if (last_pos == -1)
         last_pos = pos;
   } else {
      last_pos = -1;
   }
}
if (last_pos != -1)
   s = s.Left(last_pos);
0585570NGNG
VBやC#もTrimは全角スペースをちゃんと処理してるのね。MFCだめぽ。 orz
0586デフォルトの名無しさんNGNG
日本語が変だ。orz
0587デフォルトの名無しさんNGNG
ちょっとこのスレ元気ないし、とりあえず誰か579の問いに答えてやったらどうよ?
オレはわからないんから答えられないけどさ
■ このスレッドは過去ログ倉庫に格納されています