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

■MFC相談室 mfc17d.dll■

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/21(火) 10:38:31
Microsoft Foundation Classライブラリ専用スレです。

前スレ
■MFC相談室 mfc16d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1146117893/
0593デフォルトの名無しさん2007/04/12(木) 09:49:38
>>592
できない。
0594デフォルトの名無しさん2007/04/12(木) 11:10:59
>>592
FindItemで見つけた後、一致しているかどうか自分でチェックしたら?
0595デフォルトの名無しさん2007/04/13(金) 03:27:54
つ仮想リストビュー
05965922007/04/13(金) 14:43:38
ありがとうございました。FindItemで見つけた後strcmpで再度比較することで対応しました。
ただ、3つ以上重複した場合(aaaa,AAAA,AAAA, aaAAなど)、の場合、
AAAAのが2つ重複して追加される問題があるので
仮想リストビューにする方法も含めて、何か対応を考えて見ます
0597デフォルトの名無しさん2007/04/13(金) 23:24:35
見つかった文字列+1を指すポインタアドレスを引数として再起呼び出しをすれば如何?
0598デフォルトの名無しさん2007/04/14(土) 14:07:26
メッセージを投げたいオブジェクトを生成するために
安易に画面も持たないのに CDialog を継承したクラスをCreate してたり
するんだけど、(要は他のオブジェクトからメッセージを投げるのに、
有効なm_hWndが欲しいだけ)
CDialog じゃなくて CWnd を継承して有効な m_hWnd をもつ
オブジェクトを生成する手段ってあります?
0599デフォルトの名無しさん2007/04/14(土) 15:13:15
CWndを継承すればいいじゃない。何が問題なんだ?
06005982007/04/14(土) 16:07:09
>>599
CWnd を継承したオブジェクトを Create しても
h_hWnd は 0x0000 なので CDialog を Create してます
なにか、画面に関係しないで CWnd を Create して 有効な
h_hWnd を得られれば文句無いんですが
0601デフォルトの名無しさん2007/04/14(土) 17:12:16
うちでは問題なく作成できるから、あなたのコードに問題がある。
0602デフォルトの名無しさん2007/04/14(土) 18:04:49
コントロールバー (CControlBar) にツールバー (CToolBar) を乗せることはできないでしょうか?
0603デフォルトの名無しさん2007/04/14(土) 18:23:04
>>598
::CreateWindowExでメッセージonlyウィンドウ作って、
CWnd::SubclassWindow使えばいいんじゃね?
0604デフォルトの名無しさん2007/04/14(土) 18:33:19
仮想リストビューってSetItemCountEx()で設定できるのは
1億件までですよね?ドキュメントにはDWORDの最大数まで
サポートしているようなことが書いてありますが、
実際にそこまで設定することは出来ますか?
SetItemCountExを辿っていくとSendMessageで投げていますが、
1億を越える数字を設定するとSendMessageがFALSEを返すので
APIのバグのような気もしますけど。
0605デフォルトの名無しさん2007/04/14(土) 18:36:08
>>604
出来ません。
0606デフォルトの名無しさん2007/04/14(土) 19:05:42
>>604
>ドキュメントにはDWORDの最大数までサポートしているようなことが書いてありますが
実際はメモリ量とか空間の限界とかあるから無理。
0607デフォルトの名無しさん2007/04/14(土) 19:13:09
SetItemCountEx の仕様見ると int になってるけど
0608デフォルトの名無しさん2007/04/14(土) 19:29:02
そりゃまあ実際に限界があるのは仕方ないけど、
なんで「一億」にしてあるのかがわからん。
100000001件にすると表示されないのな。ワロス。
MSDNに書いとけよ。これじゃアメリカ国民全員の名前を
リストコントロールで表示することは出来ないじゃん。
マイクロソフトのくせに自国民の数すらサポートできない
コントロールを作るなんて非難の対象だな
0609デフォルトの名無しさん2007/04/14(土) 20:35:56
大丈夫、マイクロソフトなんて国はないから自国民は一人もいないので。
06105982007/04/15(日) 08:16:10
>>601>>603
ありがとうございます
今は休み中にてVSEしかないのでMFCが無いので試せないので
明日にでも試そうと思います
ちなみに画面を持たないCWndオブジェクトをCreate()する場合、
どんな引数が望ましいのでしょうか?
0611デフォルトの名無しさん2007/04/15(日) 09:00:12
非表示ウインドウでもhWndはあるだろ
なかったらShowWindowで表示することもできない


ShowWindow
指定されたウィンドウの表示状態を設定します。

BOOL ShowWindow(
HWND hWnd, // handle to window
int nCmdShow // show state of window
);

パラメータ

hWnd
ウィンドウのハンドルを指定します。

nCmdShow
ウィンドウの表示状態を指定します。
0612デフォルトの名無しさん2007/04/15(日) 22:16:49
質問です。
MFCで作成したソフトを公開したいのですが、VS.net2003の入っていないパソコンで
自分の作ったソフトを実行してみると、
mfc71d.dll msvcp71d.dll msvcr71d.dll
が必要です、とでてきます。
これらのdllは勝手に配布しても大丈夫なのでしょうか?
0613デフォルトの名無しさん2007/04/15(日) 22:30:07
いいえ、デバッグ版を勝手に配布してはいけません。
0614デフォルトの名無しさん2007/04/15(日) 22:34:11
>>613 mfc71.dll などdがついていないものなら配布しても大丈夫なのでしょうか?
0615デフォルトの名無しさん2007/04/15(日) 23:04:36
>>614
MSに訊け。つーか付属ドキュメントくらい読め。
0616デフォルトの名無しさん2007/04/16(月) 00:55:13
>615
便乗で質問なんだが、その手の質問は
MSDN購読してなくても答えてもらえるの?
0617デフォルトの名無しさん2007/04/16(月) 06:01:25
そういう重要なことを正規ユーザーが知らないはずがない。
無料のexpressユーザー?と思ったけど
MFCなら製品版使ってるんだろうし、どうやって手に入れたんだろう?
0618デフォルトの名無しさん2007/04/16(月) 17:40:12
すいません。くぐっても答えが見つからないので教えてください。
MFC AppWizerdで作ったDLLを
Win32 Application(SDK)から呼び出せますでしょうか?
0619デフォルトの名無しさん2007/04/16(月) 22:46:38
DLLの作りによる
0620デフォルトの名無しさん2007/04/21(土) 20:43:01
…そのまんまやなw
0621デフォルトの名無しさん2007/04/27(金) 02:12:22
>>617
> 正規ユーザーが知らないはずがない
いや、キッチリとは知らんよ俺は
VC4,VC6,VS8の正規ユーザーなんだけどさw
0622デフォルトの名無しさん2007/04/27(金) 07:54:49
そらあほだ。
0623デフォルトの名無しさん2007/04/27(金) 11:35:15
電車乗ったことあるけどキップの買い方知らないとかそういうレベル
0624デフォルトの名無しさん2007/04/27(金) 11:36:16
地方の人は知らないかもしれないけれど、今や切符を買わなくても電車に乗れるからねぇ。
0625デフォルトの名無しさん2007/04/27(金) 12:38:59
喩えの誤謬に突っ込む莫迦ありき。
0626デフォルトの名無しさん2007/04/27(金) 13:00:28
いや、寧ろ誤謬と思ってないからこそ。
実際、知らなくても利用できると言いたかった。
0627デフォルトの名無しさん2007/04/27(金) 14:21:36
他のソフトならいざ知らず、開発ツールでそんなやつがいるとは驚きだw
0628デフォルトの名無しさん2007/04/27(金) 14:56:35
_bstr_t strData[3];
strData[0] = "0000";
strData[1] = "1111";
strData[2] = "2222";

COleSafeArray sa;
sa.CreateOneDim(VT_BSTR, 3, strData);

_variant_t va = sa;

とやってみると、_variant_tのコンストラクタで例外が出てしまいます。
sa.CreateOneDim(VT_BSTR, 3, strData);
sa.CreateOneDim(VT_BSTR, 3);
とすると通過するので、CreateOneDim()にstrDataを渡す方法が
間違ってるのかなと思うんですけど、
_bstr_t配列はどうやって渡すものなんでしょうか。
それとも、CreateOneDim()には_bstr_t配列は渡せない?
0629デフォルトの名無しさん2007/04/27(金) 14:58:29
> sa.CreateOneDim(VT_BSTR, 3, strData);
> sa.CreateOneDim(VT_BSTR, 3);
> とすると通過するので

sa.CreateOneDim(VT_BSTR, 3, strData);
の部分を
sa.CreateOneDim(VT_BSTR, 3);
とすると通過するので

のミスです。失礼しました。
よろしくお願いいたします。
0630デフォルトの名無しさん2007/04/27(金) 16:25:30
_bstr_tの配列≠BSTRの配列
0631デフォルトの名無しさん2007/04/27(金) 16:41:39
>>630
ということは、_bstr_t配列のままだとCreateOneDim()に直接は渡せないということですよね。
SAFEARRAYとかはまったくの未知で、このへんの使いかたって、
ネット上を探してもなかなか見つからないのですが、
_bstr_t配列やCString配列からCreateOneDim()に渡すBSTR配列を作る方法って、ご存知無いでしょうか。
0632デフォルトの名無しさん2007/04/27(金) 17:06:44
ソース見るかメモリダンプして内部構造調べてみれば?
0633デフォルトの名無しさん2007/04/27(金) 17:21:39
切符買わないってどうやるの?
0634デフォルトの名無しさん2007/04/27(金) 17:29:32
オレはもう何年も切符買ってないなあ
Suicaとパスネットでやってきたが、最近はパスネットもいらなくなったし
オートチャージで入金もない。
車はETCで料金所はとまらないし、旅行先でレンタカー
借りるときもETC車載かどうかを気にしてる
0635デフォルトの名無しさん2007/04/27(金) 17:30:45
飛行機もfelica携帯使ってチェックインもカウンターに行かないし
並ぶことがほとんどなくなった
0636デフォルトの名無しさん2007/04/27(金) 23:24:51
で、これらは相談か?
0637デフォルトの名無しさん2007/04/28(土) 02:40:31
いいえ相談ではありません
日本語の練習です
0638デフォルトの名無しさん2007/04/28(土) 11:12:47
VC6 MFCです
プロジェクトの設定の、デバッグ、C/C++、リンクにプロジェクトオプションがあるのだが
コマンドラインからビルドする場合この引数をどの様に渡したらいいの?
0639デフォルトの名無しさん2007/04/28(土) 11:21:41
CL をコマンドラインから起動するときは、次の構文でオプションとファイル名を指定します。

CL [option...] file... [option | file]... [lib...] [@command-file] [/link link-opt...]
0640デフォルトの名無しさん2007/04/28(土) 11:40:00
>>639
サンクス
0641デフォルトの名無しさん2007/04/29(日) 02:23:43
msdev MyProject.dsp /MAKE "MyProject - Win32 Debug" /REBUILD
とかは?
0642デフォルトの名無しさん2007/04/30(月) 22:58:55
おそらくかなり初歩的な質問なのですが、ダイアログから別ダイアログを開くためにはどうすればよいのでしょうか?
VBのShowのようなコマンドがあるのかと思ったのですが、よくわかりませんでした。
よろしくお願いします。
0643デフォルトの名無しさん2007/04/30(月) 23:05:30
CAboutDlgを参考に
0644デフォルトの名無しさん2007/05/01(火) 05:06:10
>>642
インスタンス生成してから
a) Create() して ShowWindow()
b) DoModal()
のどちらでも。つか、MSDNくらい嫁。
0645デフォルトの名無しさん2007/05/01(火) 12:44:36
VC6 MFCです
メニュー→ツール→オプション→ディレクトリ配下の
インクルードファイル、ライブラリファイルは何処に保存されているのしょうか?
C:\program Files\Microsoft Visual Studio配下はgrepしてみましたがありませんでした
レジストリに記録されているのでしょうか?
知ってる人いたら教えてホスイ
0646デフォルトの名無しさん2007/05/01(火) 13:45:47
パスの順番でファイルを検索する。
0647デフォルトの名無しさん2007/05/01(火) 14:50:26
>>645
ちょっと探してみたがレジストリの
HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Build System\Components\Platforms\Win32 (x86)\Directories
に入ってるみたいだよ
0648デフォルトの名無しさん2007/05/01(火) 17:28:42
>>647
>>645ですが
神が降臨しました、ありがとう実は現在ではVC6 MFCのUIが非常に悪いので
秀丸のマクロと融合させてできる限りの操作を秀丸中心にお行おうと思っていたところです
そういう訳で探していました、本当にありがとね
処でMFCで作成したプログラムはコマンドラインからビルド、コンパイルまで出来るのでしょうか?
(rcファイルはVCで作ってあると仮定してです)?
0649デフォルトの名無しさん2007/05/01(火) 17:40:50
そりゃあできるっしょ。
プロジェクトのプロパティで、コンパイルとリンクのコマンドライン見られなかったっけ
それ参考にしたらいいと思う。
0650デフォルトの名無しさん2007/05/01(火) 17:45:48
>>649
サンクスです、取り合えず今レジのバックアップを保存したところです
これからゴリゴリとマクロを書いていきますww
0651デフォルトの名無しさん2007/05/01(火) 18:35:22
全然見当はずれの方向に進んでるみたいだけど
相当頭堅そうだから本人のやりたいようにやらせて置くのが一番だな
わざわざレジストリの場所教えてやったやつはかわいそう
0652デフォルトの名無しさん2007/05/01(火) 21:19:12
Platform SDKについてるMFCのソースをビルドすれば
OSについてるものとまったく同じDLLが出来上がるんですか?
0653デフォルトの名無しさん2007/05/02(水) 00:37:19
おい、Platform SDKはもう無くなったって、誰か教えてやれ。
0654デフォルトの名無しさん2007/05/02(水) 17:48:50
VC2005 MFCです。
複数のモードレスダイアログを入れ子のような感じで作成したいのですが
孫のウィンドウを作成したところで正常に動作しなくなってしまいました。
実際のコードは下のように書いています。

//ビューでマウスがクリックされたら子ウィンドウとしてモードレスダイアログを生成
void CtestView::OnLButtonDown(UINT nFlags, CPoint point)
{
CTestDlg *testdlg;
testdlg = new CTestDlg();
testdlg->Create(CTestDlg::IDD);
testdlg->SetParent(this);
testdlg->ShowWindow(SW_SHOW);
CView::OnLButtonDown(nFlags, point);
}

//ビューで作成した子ウィンドウのボタンが押されたら、孫のモードレスダイアログを生成
void CTestDlg::OnBnClickedButton1()
{
CTestDlgB *testdlg;
testdlg = new CTestDlgB();
testdlg->Create(CTestDlgB::IDD);
testdlg->SetParent(GetParent());
testdlg->ShowWindow(SW_SHOW);
}

何か根本的な勘違いをしてしまっているのでしょうか?
初歩的な質問ですいません、よろしくお願いします。
06556542007/05/02(水) 17:52:31
少し変えて試してみたコードをそのまま書き込んでしまいました。
testdlg->SetParent(GetParent());
↓
testdlg->SetParent(this);
でした。
0656デフォルトの名無しさん2007/05/02(水) 18:58:47
「正常に動作しなくなってしまいました」を説明してくれ。
解決の重要な手がかりなんだから。
0657デフォルトの名無しさん2007/05/02(水) 19:14:54
関係ないけど
モーダルならそういう風にローカル変数でもいいけど
モードレスだと関数抜けた後のことが気になる。
0658デフォルトの名無しさん2007/05/02(水) 19:17:27
ローカル変数ではないでしょ。
PostNcDestroy で delete this が入ってるか、メッセージで何とかしてるのかと
06596542007/05/02(水) 21:03:30
>>656
すいません、説明不足でした。
わかっている限りだと2パターンの変な挙動をしていて
1つはダイアログのウィンドウ自体は生成されているようでウィンドウの移動などはできるのですが
再描画のコードが動作していない時のような感じになる事があるのと(必ずというわけでも無いようです)
生成した孫ウィンドウがアクティブな間は何の問題も無く動作しているように見えるのですが
一度、子のウィンドウをアクティブにしてしまうとアプリケーション自体がフリーズしたような
状態になってしまうといった感じです。
念のためSDIの新規プロジェクトを作り直して見ても結果は同じでした。

>>657,658
一応 PostNcDestroy で delete this をしていました。
こういう場合でもスタティックかグローバル変数にしておいた方が安全なのでしょうか?
0660デフォルトの名無しさん2007/05/02(水) 21:44:10
>659
思いつきで書いただけだから
「関係ないけど」と断ってる
0661デフォルトの名無しさん2007/05/02(水) 21:45:08
>>659
ttp://msdn2.microsoft.com/en-us/library/ms633541.aspx
>if hWndNewParent is not NULL and the window was previously a child of the desktop,
> you should clear the WS_POPUP style and set the WS_CHILD style before calling SetParent.
>Windows 2000/XP: When you change the parent of a window, you should synchronize the UISTATE of both windows.

なんでSetParent使ってるの?
ダイアログリソースに子スタイル設定して、Createで親指定すればいいのに。
0662デフォルトの名無しさん2007/05/03(木) 00:14:49
あの最低な質問かもしれないですが、万が一という可能性もあるかもしれないので
質問させてください
MFCでコンソールアプリって作成出来ないですよね、バージョンは問いません。
0663デフォルトの名無しさん2007/05/03(木) 00:24:43
いや、普通にできるが。
0664デフォルトの名無しさん2007/05/03(木) 00:52:33
>>663
え〜まじっすか?
新規作成→プロジェクトからはMFC ActiveX ContorolWizard or MFC AppWizard(dll) or MFC AppWizard(exe)しかないのだけど?
これじゃあコンソールアプリは作成できないよね?
0665デフォルトの名無しさん2007/05/03(木) 00:57:51
>>664
Win32コンソールプロジェクトを選択して、詳細でMFCサポート追加しろ。
0666デフォルトの名無しさん2007/05/03(木) 01:16:56
>>665
そういう裏技があったのね、サンクス
0667デフォルトの名無しさん2007/05/05(土) 09:51:02
CStringを返す関数から戻ってきたクラスは自分で廃棄しないでも良いですか?
0668デフォルトの名無しさん2007/05/05(土) 10:28:54
CStringを返すと、呼び出し側ではそれのコピーを受け取るだろう。
0669デフォルトの名無しさん2007/05/06(日) 00:16:24
よくこういう仕様のクラスあるけど腐ってるよね?>CString
一見便利そうに見えるけどインスタンスがハッキリしないから
すげー扱いづらい
こういう仕様デフォにする奴ってアフォだろ

なげー文字列をCStringで扱うとアフォかってほど遅くなる
結局、使えない
0670デフォルトの名無しさん2007/05/06(日) 00:49:03
   ○○○
  ○(・ω・)○ ソンナコトイワレテモ
   ○○○   ウチ、ボン・デ・ライオンヤシ
  .c(,_uuノ
0671デフォルトの名無しさん2007/05/07(月) 11:46:34
>>669
>インスタンスがハッキリしないから
君が何を言っているのか判らないよ…
理解できてないだけじゃ?
0672デフォルトの名無しさん2007/05/07(月) 11:54:13
>>669
せめて他の文字列を取り扱う手段と比較してから結論を出してくれ。
0673デフォルトの名無しさん2007/05/07(月) 17:21:39
なんか、C/C++以外の言語と勘違いしてんじゃね?
0674デフォルトの名無しさん2007/05/07(月) 18:55:30
リソースエディタでダイアログボックスを作って、
CDialogを継承した派生クラスを作りました。
コントロールは、追加したメンバ変数を操作して
扱えましたが、ダイアログ自身はどうやれば操作
できるのでしょうか。
タイトルバーの文字列を変更する方法を模索中です。
this->SetWindowText("タイトル文字列");
を試すと異常終了だし。
0675デフォルトの名無しさん2007/05/07(月) 19:29:26
宇宙天地 與我力量 降伏群魔 迎来曙光
我が左手に封じられし鬼よ
今こそその力を、示せえーー!!
うおおおおおおーーー!!!
俺の生徒に、手を出すなあーーー!!!!
0676デフォルトの名無しさん2007/05/07(月) 20:10:38
>>674
異常終了の詳細キボンヌ
0677デフォルトの名無しさん2007/05/07(月) 20:22:51
>>676
「Visual C++ Runtime Error [中止][無視][キャンセル]」
のような感じ文面のダイアログが出て終了。

本来ならそれで正解のはずということでしょうか。
何らかのプログラム上のミスが原因で異常終了が出てるのではないか
という意味でしょうか。
0678デフォルトの名無しさん2007/05/07(月) 20:30:27
SetWindowTextをどこで呼び出してる?
コンストラクタの中とかじゃダメだよ。
ちゃんとウィンドウが作成されてCDialogオブジェクトに
アタッチされてからじゃないと。
0679デフォルトの名無しさん2007/05/07(月) 20:40:02
>>672
じゃ、mallocで確保した領域に突っ込んだ文字列でいいよ
これで想像付く?
後付けであれがないこれがないごちゃごちゃいうなよぶっ殺すぞ
0680デフォルトの名無しさん2007/05/07(月) 20:43:58
>>678
エディットコントロールやスタティックテキストの値を変更している直後
で呼び出してます。
SetWindowTextで正解で、やはり何かプログラム上のミスでしたか。
わかりました、ありがとうございます。
0681デフォルトの名無しさん2007/05/07(月) 20:50:22
CDialogもCWndの派生クラスだしな
そもそもエラーで止まったところで何エラーなのか調べなさいよ
0682デフォルトの名無しさん2007/05/07(月) 20:58:27
イヤです
0683デフォルトの名無しさん2007/05/07(月) 22:29:57
>>679
想像も何も、あんたが比較して実際に遅いかどうか判断しなさいよ。
0684デフォルトの名無しさん2007/05/07(月) 22:39:03
>>683
CStringは糞だろ
文字列に1文字ずつ足していくとどんどん遅くなってく類だろw
0685デフォルトの名無しさん2007/05/07(月) 22:42:11
どうやって足しているのか興味深いなぁ。
まさかとは思うが、CString foo = ""; for (;;) {foo = foo + '-'; std::cout << foo << std::endl;} とかしちゃってるんだろうかw
0686デフォルトの名無しさん2007/05/07(月) 23:04:49
横レスだけど、それで突然思い出したから自分用のメモ代わりに書いとく。

CString hoge, hoge2;
strcpy(hoge.GetBuffer(20), "this is a test.");
hoge="";               //クリアしたつもりだけど何故かクリアされていない
int length=hoge.GetLength();   //この値は確かにゼロ
hoge2=hoge;             //でもhogeもhoge2も"this is..."が入る

hoge="AAA";            //これなら上書きされる
int length2=hoge.GetLength();  //この値は3
hoge="";              //今度はきちんとクリアされる
0687デフォルトの名無しさん2007/05/07(月) 23:06:47
>>685
mStr += strbuff;
mStrはCString型のメンバ変数、strbuffは引数からうけとったchar*
メソッド実行するたびに鬱になるw

後、CStringの変数を引数に突っ込んで中身を変更したいときとかウザイ
transUnko(char* unko,char* chinko)
ってときにいちいち移し変えなきゃいけねぇじゃん
それか
transUnko(CString *unko,char *chinko)
作らなきゃいけねぇじゃん(俺の知識だと)
後、
strXXX系の関数でいい感じにすでにこさえてあるC言語自分ライブラリ使いたいときも面倒
つーか、気軽に文字列型として扱えないところがウンコだね
うにこーど?いらねぇってw対応予定ねーよ。マジでw

って書いてみたけどさ、
もし簡単にできるにしてもできることがわかりにきぃ
ねっとりべっとりしてやがんだこのクラス
つかいにくーい!
0688デフォルトの名無しさん2007/05/07(月) 23:18:12
MFC以外でもCString使いたいという話をよく聞くし、
MFCの中では評判いいクラスだと思う。
慣れないと使いにくいのは確か
0689デフォルトの名無しさん2007/05/07(月) 23:24:37
>686
CString::GetBuffer

解説
GetBuffer 関数から返されるポインタを使って文字列の内容を変更するときは、
次に他の CString メンバ関数を使う前に、ReleaseBuffer 関数を呼び出す必要があります。
0690デフォルトの名無しさん2007/05/07(月) 23:38:10
MFCを使うDLLの遅延ロードってNGなのかな?

というのも、delayimp.libの中ではAfxLoadLibrary()ではなく、
LoadLibrary()を使っているから、どうなんだろう??
0691デフォルトの名無しさん2007/05/08(火) 01:12:30
もともと遅延ロードってのは、セグメントを分けてれば Windows がちゃんとやってくれたんだよな。
MFCが自動的にやってくれるようになっただけで。
0692デフォルトの名無しさん2007/05/08(火) 03:18:26
GetBuffer 関数から返されるポインタを使って文字列の内容を変更するときは、
次に他の CString メンバ関数を使う前に、ReleaseBuffer 関数を呼び出す必要があります。


CString hoge, hoge2;
strcpy(hoge.GetBuffer(20), "this is a test.");
hoge="";               //クリアしたつもりだけど何故かクリアされていない
int length=hoge.GetLength();   //この値は確かにゼロ
hoge2=hoge;             //でもhogeもhoge2も"this is..."が入る
↑↑↑ここでコンパイル時にエラー出してくれりゃいいのに

hoge="AAA";            //これなら上書きされる
int length2=hoge.GetLength();  //この値は3
hoge="";              //今度はきちんとクリアされる

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