2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

MFC相談室 mfc22d.dll

1 :デフォルトの名無しさん:2011/09/15(木) 18:52:27.68
Microsoft Foundation Classライブラリ専用スレです。

■MFC相談室 mfc21d.dll■
http://hibari.2ch.net/test/read.cgi/tech/1250919279/l50
■MFC リファレンス■
http://msdn.microsoft.com/ja-jp/library/d06h2x6e(v=VS.100).aspx

2 :デフォルトの名無しさん:2011/09/15(木) 19:41:23.34
MFC リファレンス(専ブラ用)
http://goo.gl/PQkAC

3 :デフォルトの名無しさん:2011/09/15(木) 19:46:09.28
http://msdn.microsoft.com/ja-jp/library/d06h2x6e%28v=VS.100%29.aspx

まぁこれでもいけるんですけどね
そろそろしつこいから消えますねノシ

4 :デフォルトの名無しさん:2011/09/18(日) 00:38:47.20
環境は VS2010 use MFC / Windows 7です。

DLL 側でグローバル変数をこのように定義しています
__declspec(dllexport) extern CString hoge[4];

EXE 側でその変数をこのように定義しています
__declspec(dllimport) CString hoge[4];

ビルドすると下記の警告が出てしまいます、そして実行すると、

「xxx.exe の 0x00fa807b でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xfffffff4 を読み込み中にアクセス違反が発生しました。」
経験的に、このエラーの場合アクセスバイオレーションの可能性が高いと思うのですが
グローバル変数のインポート、エクスポートの仕方は間違っていないでしょうか?

警告の内容:
warning C4273: 'hoge' : dll リンクが一貫していません。
'hoge' の前の定義を確認してください

5 :デフォルトの名無しさん:2011/09/18(日) 02:02:09.56
>>4
日本語を勉強して理解できるようになったら、該当するエラーコードをドキュメントで調べる。
それができたら、該当エラーを修正する。
馬鹿は氏ね。

6 :デフォルトの名無しさん:2011/09/18(日) 14:17:26.20
VC6で作成したリソースファイルをVC10は利用できますか?

7 :デフォルトの名無しさん:2011/09/18(日) 14:30:02.01
使えるけど馬鹿には無理かも

8 :デフォルトの名無しさん:2011/09/18(日) 21:00:35.58
>>6
使える。
VisualStudio2010持ってないなら評価版落として試してみるといいよ。

9 :名無し募集中。。。:2011/09/18(日) 21:48:03.42
ただし評価版はMFCが使えないんだけどな

10 :デフォルトの名無しさん:2011/09/18(日) 21:55:11.75
>>9
使えないのはEEだろ、馬鹿が

11 :名無し募集中。。。:2011/09/18(日) 22:35:13.95
Ouch!

12 :デフォルトの名無しさん:2011/09/19(月) 00:15:03.37
試用期間があるだけ
MFCが使えないののはEEのほうじゃないのか

13 :デフォルトの名無しさん:2011/09/19(月) 00:45:09.34
>>12
直前のレスすら読まない、おまえが一番使えない

14 :デフォルトの名無しさん:2011/09/19(月) 23:14:37.52
別に使われてない

15 :デフォルトの名無しさん:2011/09/21(水) 19:55:08.93
>>13
バカは黙れ

16 :デフォルトの名無しさん:2011/10/14(金) 12:31:49.04
VS2005、SDIにてエクスプローラの詳細風の画面を作成中です。
ツリービューの方は表示できたのですが、リストビューが上手く表示できません。
Insertcolumnにてカラムを追加して、戻り値は正常なのですが、
追加後にgetcolumnすると戻り値がfalseになっている状態です。
解決方法んを教えていただけないでしょうか?

17 :デフォルトの名無しさん:2011/10/14(金) 14:24:24.83
ソースを出さずにバグを指摘しろとエスパー募集

18 :デフォルトの名無しさん:2011/10/14(金) 18:59:00.79
LVCOLUMNの中身を真面目に初期化していないとかじゃね?

19 :デフォルトの名無しさん:2011/10/14(金) 19:57:48.56
16です。
ソースがなくて申し訳ないです。
下記のページ丸写しと考えて下さい。
http://www.g-ishihara.com/mfc_sd_03.htm

現状として、新しくプロジェクトを作成したときは上手くできたのですが、
分割ウインドウにしたらできませんでした。

20 :デフォルトの名無しさん:2011/10/14(金) 20:15:36.37
>>19
ちまちまエラーの確認する位ならさっさと例外投げろや糞が、とか思ってしまった。
というか、GetColumnの呼び出しがそのページのどこにも無い件について。

21 :デフォルトの名無しさん:2011/10/14(金) 20:32:17.56
Getcolumnに関しては、insert後にチェックとして私が追加しました。
ソースの変更はそこのみです。

22 :デフォルトの名無しさん:2011/10/14(金) 20:38:48.49
で、cchTextMaxを設定しないまま、
フラグもそのままに呼び出した、と。

23 :デフォルトの名無しさん:2011/10/14(金) 22:18:32.03
はい。
でも文字列を設定すれば必要ないのではないのですか?

24 :デフォルトの名無しさん:2011/10/15(土) 07:49:33.26
最大文字数を負の値で指定されても対応に困るだろ?
デバッグ環境だと0xCCで埋められているだろうから、
-858993460文字にでもなってるんじゃねw

25 :デフォルトの名無しさん:2011/10/15(土) 13:46:25.74
なるほど。
じゃあ新しくプロジェクトを作成して出来たのは
たまたまだったと言うことですね。

26 :デフォルトの名無しさん:2011/11/22(火) 07:49:51.88
質問です。

VS2005で作ったダイアログベースのプログラムなんですが、
プログラム起動時に表示されるダイアログから新しい別の
ダイアログをDoModal()で表示させる際に、元のダイアログを
ShowWindow(SW_HIDE)で非表示にしています。
しかしこのプログラムをWindows7上で実行した場合、たとえ
ShowWindow(SW_HIDE)でいったんは非表示にできたとしても、
タスクバー上のプログラム名をクリックしたりした場合などに、
非表示にしたはずのダイアログが表示されてしまいます。
これを防いで非表示のままにする方法について、、あるいは、
システムがこのようにダイアログを勝手に表示させようとする
時にプログラム側で呼び出されているハンドらか何かについて、
お教えいただけないでしょうか。

27 :デフォルトの名無しさん:2011/11/22(火) 09:28:42.54
>>26
7での動作は知らないけれど、
親を隠した状態で子をモーダルで出したいということであれば、
自分はよくSetWindowRgn()を使ってる。

SetWindowRgn(CreateRectRgn(0, 0, 0, 0), TRUE);
別のダイアログ.DoModal();
SetWindowRgn(NULL, TRUE);


28 :デフォルトの名無しさん:2011/11/22(火) 20:29:25.73
>>27
その方法でできました。Windows7でも問題なく非表示を維持
できるようです。ありがとうございました。

関連して新しい質問なのですが、現在のダイアログから別の
ダイアログをDoModal()で表示したとき、その拡張スタイルに
WS_EX_APPWINDOWが指定されていれば、タスクバー上に
新しいダイアログのボタンが表示されるので、それを押して
最小化することができますが、しかし同時にタスクバー上の
ボタンが元ダイアログと新ダイアログとで別々に2つ表示されて
しまいます。
逆に、新ダイアログについてWS_EX_APPWINDOWの指定が
外れていれば、タスクバー上のボタンは元ダイアログのもの
1つだけしか表示されませんが、そのボタンを押しても最小化
することができなくなります。
タスクバー上のボタンを1つだけ表示させて、かつそのボタンを
押すことで新しいダイアログを最小化できる方法は無いでしょうか?
ModifyStyleExで元のダイアログのほうからWS_EX_APPWINDOWを
取り除くことも試してみましたが、うまく機能しませんでした。

29 :デフォルトの名無しさん:2011/11/23(水) 16:09:42.12
CFrameWndExにドッキングしたCPaneDialog派生のウィンドウ
サイズを固定にすることってできますか?

CFrameWndExに固定サイズのダイアログバーが付けれれば他の
方法でも良いのですが。

30 :デフォルトの名無しさん:2011/11/29(火) 22:05:50.67
アプリケーションを最小化して元に戻すときのイベントって何があるんでしょうか?

最小化したときにタスクバーをクリックしても
元のサイズに戻らなくなってしまう不具合が出てしまって
現在対処中です

元のサイズに戻すイベントがどれかわからずまったく修正のしようがない状態です

31 :デフォルトの名無しさん:2011/11/29(火) 22:09:57.46
Googleで調べてみたところ

// 元のサイズに戻す
AfxGetMainWnd()->PostMessage(WM_SYSCOMMAND, SC_RESTORE);

こんなコードがヒットしたので「RESTORE」でプロジェクトを検索したところ何もヒットしませんでした。

32 :デフォルトの名無しさん:2011/11/30(水) 10:14:45.40
自分で追加しないとプロジェクトには何もないでしょう

33 :デフォルトの名無しさん:2011/11/30(水) 19:07:21.63
>>30
WM_SIZEのwParam見れ

34 :デフォルトの名無しさん:2011/12/01(木) 07:55:06.52
CStringに書式指定(%-04dとか%sとか)を含む文字列が含まれている場合、
その書式指定の部分だけを抽出した部分文字列を得る良い方法ってありますか?

自分でも、'%'が出てこないかFindして出てきた位置の次に最初に'd'や's'が出てくる位置を
それぞれ見つけてきて、その位置の間の長さが最も短くなる部分文字列を取ればいい、
というアルゴリズムは思いつきますが、書式指定子('d'や's')をきちんと網羅できてないと
バグの原因になるのではないかと思い、もしかすると同じコードを今後も流用する可能性が
あることを考えると、より安全確実に実施できる方法が関数として既に用意されているなら
それを利用したいと考えています。

何か良い方法があればご教授ください。

35 :デフォルトの名無しさん:2011/12/01(木) 08:18:17.34
書式指定の部分はprintfなんかと同じ方法でいいと思うけど
何が問題なのか意味不明

36 :デフォルトの名無しさん:2011/12/01(木) 08:37:22.03
えーと'%-04d'とかを、(引数が代入されないままの)そのままその部分だけ取得したい、ということです。

37 :デフォルトの名無しさん:2011/12/01(木) 09:44:49.41
>>34
なんでそこだけを抽出したいの?
全ての書式指定子を網羅的に扱いたいならprintf()(の下請け)がやっている筈の構文解析をやるしかなくなるけど。
例えば、"%2$*1$lld"みたいなものも扱うのかって問題もあるし。

38 :デフォルトの名無しさん:2011/12/02(金) 07:54:32.78
>>37
書式指定を含む文字列に引数を代入する場合、単に代入するだけじゃなくて
変換もかかるので、その引数が代入された後にどういう部分文字列になる
のかを見たい、というのが目的で、具体的には、書式指定を含む任意の
文字列とそこに代入されるべき可変個数引数が与えられた時に各引数の
代入された後の姿(部分文字列)をCStringArrayに格納したい、というのが
直接的にやりたいことです。そのために元の文字列の書式四手が現れる
位置(とその個数)を予め知っておきたい、ということです。

39 :デフォルトの名無しさん:2011/12/02(金) 10:23:41.35
VC持ってるならCRTのソースが入ってるでしょ
解析すればよろし

40 :デフォルトの名無しさん:2011/12/02(金) 10:29:15.05
>>38
なんだかよく判らんが、変換前と変換後を比較すればいいんじゃないのか?

41 :デフォルトの名無しさん:2011/12/02(金) 12:49:55.30
それはそれで大変でしょ
変換前と変換後が一緒だったら検出出来ないし
"%s"が"%s"に置き換わったら無理

42 :デフォルトの名無しさん:2011/12/02(金) 20:32:49.53
>>39
見てみたところ crt/src/output.c と crt/src/input.c に記述されている
_output と _input という関数が、それぞれprintf系とscanf系の実体の
ようで、いずれも愚直に1文字ずつポインタをずらし値をチェックしていき
書式指定を抽出しようとする泥臭い処理になってました。
ここのチェックの処理が関数として独立してくれていればそれを利用して
コードを書くこともできるんですが、現時点では残念ながらこれらの処理を
まるまるコピペして使うしかなさそうです。

43 :デフォルトの名無しさん:2011/12/06(火) 13:35:24.63
VC2008でXPを使用しています。
MFCアプリでOnPaintで描画をしている以下の2つのケースで
ケースAの方だけ描画がされなくなります。
処理はちゃんと走っているのに
最初はちゃんとひょうじされているのに
回数を重ねるとまったく表示されなくなります。
いったいなぜなんでしょうか?同じプログラムに見えるのに。。。

ケースA
for(i = 0;i < 30;i++)
{
pFont = (CFont *)dc.SelectObject(&font);
dc.DrawText(...略);
dc.SelectObject(pFont);
}


ケースB
pFont = (CFont *)dc.SelectObject(&font);
for(i = 0;i < 30;i++)
{
dc.DrawText(...略);
}
dc.SelectObject(pFont);


44 :デフォルトの名無しさん:2011/12/06(火) 14:30:52.31
再現する最小コードを貼るべき

45 :片山博文MZ ◆0lBZNi.Q7evd :2011/12/06(火) 14:55:23.54
>>28 モードレスダイアログ

46 :デフォルトの名無しさん:2011/12/06(火) 15:20:57.90
>>43
フォントオブジェクトの寿命。

47 :デフォルトの名無しさん:2011/12/06(火) 15:41:56.43
>最初はちゃんとひょうじされているのに
>回数を重ねるとまったく表示されなくなります。
GDIオブジェクトのリークが怪しい


48 :デフォルトの名無しさん:2011/12/06(火) 22:01:26.55
>>43
なんか、そこだけじゃなくて、その外側に問題がありそうな希ガス。


49 :デフォルトの名無しさん:2011/12/08(木) 13:53:05.97
VC2005のバグじゃないかと思うんだけど、OnBnSetfocusButtonに入ってこない。
再現させるプロジェクトの作成は簡単。

1.MFCアプリをダイアログベースで新規作成。
2.ダイアログにButton1を載せる。
3.そのButton1を右クリックで、「イベントハンドラの追加」→BN_SETFOCUSを選んで、「追加して編集」。
4.OnBnSetfocusButton1()ができるので、そこにMessageBoxでも書いておく。

これで実行するとダイアログ上には、OK、キャンセル、Button1の3つのボタンがあり、
タブキーでフォーカスを移動していってButton1がフォーカスされても、OnBnSetfocusButton1()の中の処理が実行されない。

これは明らかなバグだよね?
このバグはCButtonだけで、CEditの場合はうまくいくんだ。

50 :片山博文MZ ◆0lBZNi.Q7evd :2011/12/08(木) 13:54:50.22
>>49 BS_NOTIFYスタイルが必要。

51 :デフォルトの名無しさん:2011/12/08(木) 14:07:58.82
>>50
おお!
感謝します!

52 :片山博文MZ ◆0lBZNi.Q7evd :2011/12/08(木) 14:10:17.46
>>51 リファレンスに記載済み。今度質問するときは確認しな。

53 :デフォルトの名無しさん:2011/12/08(木) 14:15:17.59
BS_NOTIFY つけてる?

15 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)