くだすれC++Builder(超初心者用)その3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/02/12(月) 03:39:51もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
C++Builder使いが優しくコメントを返しますが、
お礼はC++Builderの布教と初心者の救済をお願いします。
Borland Home Page http://www.borland.co.jp/
<過去スレ>
くだすれC++Builder(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1117225464/l50
くだすれC++Builder(超初心者用)その2
http://pc10.2ch.net/test/read.cgi/tech/1144308804/l50
<兄弟スレ>
くだすれDelphi(超初心者用)その39
http://pc10.2ch.net/test/read.cgi/tech/1169386914/l50
0514デフォルトの名無しさん
2008/05/10(土) 16:40:200515デフォルトの名無しさん
2008/05/10(土) 16:51:18メインフォームのメンバ関数として定義してりゃそりゃ見つからんだろ。
普通の関数にしないと。
0516デフォルトの名無しさん
2008/05/10(土) 18:26:48なるほどっ!!
// this->BorderStyle = FBorderStyle; // ←これじゃBorderStyleが変わるわけがない
TEdit::BorderStyle = FBorderStyle; // ←こっちでバッチリ!!
オーバーライドされる前のやつってのも、こうすれば使えるんっすね!!
ありがとうございましたぁーーーーっ!!!
0518デフォルトの名無しさん
2008/05/10(土) 19:38:35C++Builderの入門書じゃなくてC/C++そのものの入門書読むことをすすめとく。
STLもvectorくらいは最低覚えとけ。
0519デフォルトの名無しさん
2008/05/13(火) 15:48:44enum TMyEnum {meA = 3, meB = 6, …… };
という型のプロパティを、オブジェクトインスペクタでプルダウンリストから選択して設定できるようにしたい。
ということで、プロパティエディターに TEnumProperty を使って登録しようと思ったのですが、ヘルプを参考に
#include <DesignEditors.hpp>
namespace Tenumproperty
{
void __fastcall PACKAGE Register()
{
RegisterPropertyEditor(__typeinfo(TMyEnum), 0L, "", __classid(TEnumProperty));
}
}
とやっても、
[C++ エラー] BinEdit.cpp(52): E2242 '__classid' には VCL 形式のクラス型が必要
というエラーが出て通りません。
インクルードするヘッダを <VCLEditors.hpp> と取り替えたり、両方記述してみたり、
あるいは、「Designeditors::TEnumProperty」としてみたりとか色々と試行錯誤してみましたが駄目でした。
class DELPHICLASS TEnumProperty;
class PASCALIMPLEMENTATION TEnumProperty : public TOrdinalProperty
というのは「VCL 形式のクラス型」ではないのでしょうか?
ご指導の程、よろしくお願いいたします。
<(_ _)>
0520デフォルトの名無しさん
2008/05/13(火) 16:46:19エラーが出ていたのは、__classid(TEnumProperty) ではなく、__typeinfo(TMyEnum) の方でした。
TMyEnum はクラスではないので、
PTypeInfo TypeInfo;
PPropInfo PropInfo = GetPropInfo(__typeinfo(TForm), "BorderStyle");
if (PropInfo)
TypeInfo = *(PropInfo->PropType);
という具合にしないといけないようですが、GetPropInfo がよくわかりません。
ヘルプを見ても引数が void のものしかありませんし、
Win32API の方で GetProp というのが該当する様ですが、こちらに変えてもうまくゆきませんでした。
enum型の型情報ポインタってのは、いったいどうやったら取得できるのでしょうか (´;ω;`)
0521デフォルトの名無しさん
2008/05/13(火) 19:02:40extern PACKAGE PPropInfo __fastcall GetPropInfo(PTypeInfo TypeInfo, const AnsiString PropName)/* overload */;
こんな関数がオーバーライドされているようでした。
コンポーネント本体のヘッダ、ソースと同じパッケージに突っ込むことで
なんとかこれで「TMyEnum型の型情報ポインタ」とやらを取得できているっぽいです。
これで、プロパティエディタを登録できたはず!
と思いきや、全然反映されていません(´;ω;`)
素のTEnumPropertyじゃ駄目なのかと、継承クラスを作ってもみましたが、やっぱりだめ
Designintf::TPropertyAttributes __fastcall TAlignmentProperty::GetAttributes(void){
return TPropertyAttributes() << paValueList << paRevertable;
}
AnsiString __fastcall TAlignmentProperty::GetValue() {
int iValue = GetOrdValue();
switch(iValue) { 〜中略〜
default : return AnsiString("dtUnknown");
}
}
void __fastcall TAlignmentProperty::SetValue(const AnsiString asValue) {
if(asValue == AnsiString("dtLeftTop") ) SetOrdValue(DT_LEFT + DT_TOP + DT_SINGLELINE + DT_NOCLIP);
else SetOrdValue(NULL);
}
TEnumPropertyを継承したときのオーバーライドってこれで合ってますでしょうか よろしくお願いします <(_ _)>
0522デフォルトの名無しさん
2008/05/17(土) 22:06:01TfmOption *fmOption = new TfmOption(this);
fmOption->ShowModal();
delete fmOption;
どうもうごきません。
それとモーダルもしたくないのですが、
普通にメインウィンドウと同等のウィンドウとしたいのです。
オプションで初期にはロードしたくありません
0523デフォルトの名無しさん
2008/05/18(日) 07:43:32TForm::Visibleをチェック。
新規作成したフォームはデフォルト値がfalseになってる。
0524デフォルトの名無しさん
2008/05/18(日) 10:04:48Visible=trueは必要ないハズ。
>>522は基本的にOKだと思う。
動かないとは、表示されないという意味なのだろうか。
モーダルにしたくないなら、
fmOption->Show();
0525デフォルトの名無しさん
2008/05/18(日) 14:42:51void __fastcall Tform1::Button1Click(TObject *Sender)
{
*fmOption = new TfmOption(this);
fmOption->Show();
}
//---------------------------------------------------------------------------
void __fastcall Tform1::Button2Click(TObject *Sender)
{
delete fmOption;
}
//---------------------------------------------------------------------------
//ヘッダ
private: // ユーザー宣言
TfmOption *fmOption ;
まず、*fmOptionの*すらわからずやってます。
やりたいことは、オプションのコンポーネントがおおすきるので、
fmOptionの起動に時間がかかります。
それで、exe起動時に起動画面をだし、その間にオプションを出すよていです。
自動生成フォームとして提供したら起動画面がオプションがロードされた後
出てきて意味がないのです。
で、メインフォームのprivate変数にオプション保持用の変数をもって、
ロードしたいのですが、簡単そうでむずかしくて・・・。
0526デフォルトの名無しさん
2008/05/18(日) 14:43:570527デフォルトの名無しさん
2008/05/18(日) 19:21:120528デフォルトの名無しさん
2008/05/19(月) 01:06:04その気がないならDelphiのほうがまだましだと思う。
0529デフォルトの名無しさん
2008/05/19(月) 17:06:13>>528の方がもっと低脳
の件について
0530デフォルトの名無しさん
2008/05/19(月) 19:49:260531デフォルトの名無しさん
2008/05/19(月) 19:58:38ヒント:ヘルプ
0532デフォルトの名無しさん
2008/05/20(火) 17:59:51× の件
○ な件
0533デフォルトの名無しさん
2008/05/20(火) 18:07:55buf[0]の値が255であるとき
Edit->Text.printf("%02X",buf[0]);
ヘキサの[FF]と表示されるようにしたいのですが、やはり
AnsiString ss.printf("%02X",buf[0]);
Edit->Text = ss;
のように代入するしか方法はないのでしょうか?先人の方教えて
頂けませんか?
0534デフォルトの名無しさん
2008/05/20(火) 18:25:010536デフォルトの名無しさん
2008/05/20(火) 19:39:56AnsiStringで受け取った入力を、char[80]から入れたいんだけど、どすればいいんすか?
0537536
2008/05/20(火) 19:41:10入力されるブツは、日本語ダス
0538デフォルトの名無しさん
2008/05/20(火) 19:58:30strcpy
0539デフォルトの名無しさん
2008/05/20(火) 20:22:050540デフォルトの名無しさん
2008/05/22(木) 21:03:52BDS2006にて
VCLフォームアプリケーションを新規作成する。
TExcelApplicationをフォームに貼り付ける。
コンパイルすると
[リンカ エラー] Error: 未解決の外部参照 '__fastcall System::Variant::operator =(wchar_t *)' が
C:\PROGRAM FILES\BORLAND\BDS\4.0\LIB\BCBOFFICEXP.LIB|Excel_XP_srvr.cpp から参照されました
というエラーが出ます。
このエラーの解決方法がわかりません。
なにかをincludeしなければならないのでしょうか。
0541デフォルトの名無しさん
2008/05/22(木) 21:09:34Excel_XP・・・となっている部分が
Excel_2K・・・となり
問題なくコンパイルは通ります。
0542デフォルトの名無しさん
2008/05/22(木) 21:12:15ヘッダじゃなくてライブラリファイルが抜けてるっぽいね。リンカエラーだから。
0543デフォルトの名無しさん
2008/05/26(月) 22:29:09BMP形式で保存すると32bitになりますよね?
そこで、PixcelFormat で pf24bitを指定すると、なぜか書けないんです。
そこで、あえて32bitを指定してもなぜか書けずに特に指定せずに
image->picture->〜 = (TColor)0xffffff
だと書ける。
ただ、保存するのは24bitのBMPにしたいんだが、ググると
ColorToRGBという関数があるみたいなんですが、
これの使い方教えて貰えませんか?ヘルプ見ても、いまいちわからなくて。
また、この関数使うのより簡単に24bitBMPへ保存できる良い方法が有れば伝授してください
0544543
2008/05/26(月) 23:01:57環境は、Builder 2006です。
0545543
2008/05/27(火) 19:08:00Canvasに書いてから、pf24bitを指定する事で書けました。
どうやら順番があったようです
0546デフォルトの名無しさん
2008/06/08(日) 14:40:21dll内にフォームを用意したいのですが
うまくいきません
Form1=new TForm1(this);Form1->ShowModal();delete Form1;
うまく呼び出す方法はあるのでしょうか?
0547デフォルトの名無しさん
2008/06/09(月) 23:17:59フォームにボタンとラベルを各1個配置し、ボタンをクリックする度に
ラベルに表示される数字が+1されるようにしてあります。
以下のコードで普通に実行するぶんには動くのですが、(※)の箇所で
ブレークを掛けてステップ実行を2回くらいやって再実行すると
フリーズ(と思うほど長時間固まる)してしまいます。
なぜなのか教えて頂けないでしょうか。
void __fastcall TAppThread::Execute(void)
{
int cnt;
cnt = 0;
count = 0;
while ( 1 ) {
cnt++; //(※)
cnt--;
cnt++;
Synchronize( Update );
Suspend();
}
}
void __fastcall TAppThread::Update()
{
Form1->Label1->Caption = IntToStr( ++count );
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if ( appThread )
appThread->Resume();
}
0548デフォルトの名無しさん
2008/06/17(火) 03:43:57恐縮ですが質問させてください。
プログラム上で動的にコンポーネント(TPanel)を配置しています。
そのコンポーネントにOnDragDropとOnDragOverイベントを取得させて
動作させたいのですがやり方がよく分からずうまくいきません。
初歩的な質問で申し訳ありませんが教えて頂けないでしょうか。
よろしくお願いします。
0549デフォルトの名無しさん
2008/06/17(火) 08:15:260550デフォルトの名無しさん
2008/06/17(火) 10:23:37だんだんプロジェクトが大きくなってくると、デバッガのインスペクトとかで表示される値が
むちゃくちゃになってきます。回避方法ってないものでしょうか?
0551デフォルトの名無しさん
2008/06/17(火) 10:26:58それは無い。
0552デフォルトの名無しさん
2008/06/17(火) 11:24:590553デフォルトの名無しさん
2008/06/17(火) 11:26:56コンパイラの最適化の結果。
0554デフォルトの名無しさん
2008/06/17(火) 11:32:530555デフォルトの名無しさん
2008/06/17(火) 11:52:05プロジェクトにファイルを追加した直後は、ブレークポイントで止まらなくなるけど。
ブレークポイントで止まった後は変数が変になることはない。
0556デフォルトの名無しさん
2008/06/17(火) 12:13:29struct Hoge : vector<int> {};
Hoge hoge;
try
{
string a;
if (a.empty())
throw exception();
Test test;
}
catch (...)
{
}
これのTest(何のクラスでもいい)のデストラクタがなぜか呼ばれるんだけど、
再現する人いるかな。
0557550
2008/06/17(火) 12:37:45コンパイラの最適化OFFで、
if(Instance != NULL)
{
Instance->Data = 3;
}
とかやって、Instance->Data にブレークポイントを設定したとする。
それで、Instance の値を見ると NULL になってることがある。
プログラム自体はちゃんと動くんだけど、デバッガが、グダグダになることがある。
ダイレクトXアプリってのもあるのかなぁ?
あと、これは仕様だと思うんだけど、いつのまにか、TOpenDialog で
マイコンピュータを開くと、なにも表示されなくなった。
0558デフォルトの名無しさん
2008/06/17(火) 12:39:14多分、6にうpするとそんなことない。
0559デフォルトの名無しさん
2008/06/17(火) 12:49:036ってもう買えないよね?
0560デフォルトの名無しさん
2008/06/17(火) 12:53:020561デフォルトの名無しさん
2008/06/17(火) 16:40:400562デフォルトの名無しさん
2008/06/17(火) 16:42:46ま、5と6使った自分なら、間違いなく6を選ぶ。
0563デフォルトの名無しさん
2008/06/17(火) 17:07:53BDS2006 はもってるんだけど、なんかこれもバギーらしいな。
思い切って、2008 がでるまで待とうかとも思ってるんだけどね。
9月ぐらい?
printf デバッグとかもう嫌だよ・・・。
0564デフォルトの名無しさん
2008/06/17(火) 18:40:32パソコンを再起動
これ常識。
これで回復する。
自分のプログラムで、どっかぶち壊しまくってるんだよ。
0565デフォルトの名無しさん
2008/06/17(火) 18:45:000566デフォルトの名無しさん
2008/06/17(火) 18:52:20自分で自分のDSをぶちこわしているから変数がヘンになる。
0567デフォルトの名無しさん
2008/06/17(火) 19:11:35DSとか言ってるから古い人ぽいけど。
0568デフォルトの名無しさん
2008/06/17(火) 19:47:060569デフォルトの名無しさん
2008/06/17(火) 22:13:34デバッガ、コードガード、OS、の3つをすり抜けないと無理なんだけど、
そう言う事って出来るの?セキュリティホールみたいな物か?
0570548
2008/06/18(水) 02:27:24void __fastcall TForm1::N1Click(TObject *Sender)
{
TTabSheet* tb;
TScrollBox* sbox;
TPanel* panel;
TButton* bt;
tb = new TTabSheet(PageControl1);
tb->PageControl = PageControl1;
sbox = new TScrollBox(tb);
sbox->Parent = tb;
...
panel = new TPanel(sbox);
panel->Parent = sbox;
...
bt = new TButton(panel);
bt->Parent = panel;
...
bt->DragMode = dmAutomatic;
}
こんな感じでPageControlに新しいタブを作成し、その中にTScrollBox、
更にその中にTPanel、更にその中にTButtonを配置させています。
やりたいことは、この新しく配置したTPanel上のTButtonをマウスドラッグで
移動できるようにしたいのですがその方法がよく分からないということです。
回りくどい説明で申し訳ありません。
0571デフォルトの名無しさん
2008/06/18(水) 07:39:030572548
2008/06/18(水) 12:05:40マウスの操作でボタンの座標位置を変更できるようにしたいです。
「自分で追加したボタンを自分の配置したい位置につまんで移動できる」
と言った方がわかりやすいかもです・・・。
OnDragDropイベントではなくOnMouseMoveイベントを使えばもっときれいにできるのかもしれないんですが、
ここではとりあえず「ドラッグで移動して配置する」という操作だけを目的としていたので
イベントとして使いやすいと感じたDragDropを使用しています。
0573デフォルトの名無しさん
2008/06/18(水) 22:48:51でクリックしようとしたときにちょっとした操作ミスでドラッグで移動になる、と。
そんな自己満足なUIは考え直せって。
0574デフォルトの名無しさん
2008/06/18(水) 23:07:010575デフォルトの名無しさん
2008/06/18(水) 23:39:38で所望の動作はWM_NCHITTESTでHT_CAPTIONってのがお手軽。
0576548
2008/06/20(金) 02:47:20ボタンクリックとドラッグ混同の操作ミス等、言われてみたらその通りだと感じました。
アドバイス含め、対処できるように組み直したいと思います。
移動についてはさせることができました。
アドバイス、ご指摘ありがとうございました。
0577デフォルトの名無しさん
2008/06/20(金) 15:57:40うちも VCL 以外で近いことを以前やったことあるけど、
そのときの実装は何ピクセル以上ドラッグするとドラッグ開始、
っていうふうにしてた。
0578デフォルトの名無しさん
2008/06/24(火) 04:30:23-Hr スイッチにより vcl4.h を vcl.h の代わりにインクルードします
っていうメッセージが出るんだけど、このスイッチって何処に記載されてるの?
古いプロジェクトの移行って面倒だね・・・。
0579デフォルトの名無しさん
2008/06/30(月) 16:46:200580デフォルトの名無しさん
2008/07/01(火) 04:50:200581デフォルトの名無しさん
2008/07/01(火) 09:39:37ところで、Vi$taってなぜかXPとマルチブートできませんよね?
0582デフォルトの名無しさん
2008/07/01(火) 09:50:060583デフォルトの名無しさん
2008/07/01(火) 19:26:51Vistaの動作検証だけなら開発は2000かXPで。
視覚スタイルは.manifest同梱で対応可。
Vistaアイコン(PNG圧縮256px)はIcoFxで可能。
res作成はVista対応SDKのrc.exeで可能。
0584デフォルトの名無しさん
2008/07/01(火) 19:49:260585デフォルトの名無しさん
2008/07/01(火) 22:49:40そうなのか・・・XPに入れてexeとdllだけ2000にコピーしたから気付かなかったわ。
0586デフォルトの名無しさん
2008/07/02(水) 08:57:02ビジュアルスタイル対応は、Theme Manager 使った方がいいのでは。
0587デフォルトの名無しさん
2008/07/04(金) 22:52:10TButtonのCaptionの色を変えるのに、次のようなコードでは変わりませんでした。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Button1->Caption == "blue") {
Button1->Caption = "red";
Button1->Font->Color = clRed;
} else {
Button1->Caption = "blue";
Button1->Font->Color = clBlue;
}
}
どうしたらいいんでしょうか? アドバイスよろしくお願いします。
0588デフォルトの名無しさん
2008/07/04(金) 22:56:41もし文字色をシステムに従わないようにしたいのであれば、オーナドローでどうぞ。
0590デフォルトの名無しさん
2008/07/06(日) 01:08:29{
char *aaa;
aaa = "jpg";
if(aaa == "jpg")Button1->Caption = "jpg";
}
C言語の基本的なことだとはわかっているのですが・・・
これがtrueにならない理由って何でしょう?
基本的すぎるのか、文字列でググっても出てこないのはなぜー
0591デフォルトの名無しさん
2008/07/06(日) 01:18:27void __fastcall TForm1::Button1Click(TObject *Sender)
{
char* aaa;
char* bbb;
aaa = "jpg";
bbb = "jpg";
ShowMessage(AnsiString().sprintf("aaa=%08X bbb=%08X", aaa, bbb));
}
0592デフォルトの名無しさん
2008/07/06(日) 03:08:060593デフォルトの名無しさん
2008/07/06(日) 04:34:540594デフォルトの名無しさん
2008/07/06(日) 05:21:36メモリは壊れないのではないのか。
0595デフォルトの名無しさん
2008/07/06(日) 05:24:50ができないのを今初めて知った(´・ω・`)
0596デフォルトの名無しさん
2008/07/08(火) 13:57:48if ( strcmp( aaa,"jpg" )==0 ) とすればええんでないの?
"jpg"ってすると、メモリのどっかに確保された4バイト('j','p','g',0)のアドレスを示す。
aaaに格納された"jpg"のアドレスと、ifで比較している"jpg"のアドレスが違うからfalseになる。
0597デフォルトの名無しさん
2008/07/08(火) 18:27:30char* でやらないで AnsiString でやれば動く。
0598デフォルトの名無しさん
2008/07/09(水) 23:36:09Button1Click(Button1); Button1Click(Button2); Button1Click(Form1);
のどれでも動くみたいですが、Senderには普通何を与えるのが正しいの?
Senderの役割を教えてください。
//Form1上にButton1とButton2
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button1Click(Button2);
}
0599デフォルトの名無しさん
2008/07/09(水) 23:54:20たとえば拡大ボタンと縮小ボタンがあって、それぞれにイベントハンドラ書くのはアホ臭いから
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int zoom;
TButton* button = dynamic_cast<TButton*>(Sender);
zoom = button->Tag;
if (zoon == 1) 拡大();
else 縮小();
}
こんな感じで使ったりする。
ハンドラ内でSender使わないならthisで十分。
0600デフォルトの名無しさん
2008/07/10(木) 00:14:170601デフォルトの名無しさん
2008/07/22(火) 14:35:51http://homepage2.nifty.com/spw/tips/GetIfTable.html
上記のサンプルプログラムを自分の環境で実行してみたのですが、以下のエラーが出てしまいます。
[リンカ エラー] 外部シンボル 'GetIfTable' が未解決(D:\ADDRESGET\UNIT1.OBJ が参照)
ソースファイルをダウンロードして実行してみたところ、正常に動作したことから環境は間違って無いと思うのですが・・・。
インクルードファイルも同じにして、オプションのリンカやディレクトリ/条件も揃えてみましたがダメでした。
この場合、何を見たらよろしいのでしょうか?
よろしくお願いします。
0602デフォルトの名無しさん
2008/07/22(火) 14:54:57bcb/lib/psdkにあるのプロジェクトに追加しる
0603デフォルトの名無しさん
2008/07/22(火) 15:01:37・・・その通りでした。
インクルードで指定して、エラーも出ていないから必要無いと思い込んでました。
本当にありがとうございました。
0604D
2008/07/22(火) 15:12:34☆ チン ハラヘッタ〜
ハラヘッタ〜
☆ チン 〃 ∧_∧
ヽ___\(\・∀・)
\_/ ⊂ ⊂_)
/ ̄ ̄ ̄ ̄ ̄ /|
| ̄ ̄ ̄ ̄ ̄ ̄| |
|淡路たまねぎ|/
 ̄ ̄ ̄ ̄ ̄ ̄
0605デフォルトの名無しさん
2008/07/22(火) 15:38:51コンパイルとリンクに違いについてもうちょっと勉強した方がいい
0606デフォルトの名無しさん
2008/07/25(金) 03:16:38char chrBuf[1024];
AnsiString asBuf;
strcpy(chrBuf,"123456");
strcpy(asBuf.c_str(),chrBuf);
asBuf.Delete(3,3);
Label1->Caption = asBuf.c_str();
これで、「126」と表示させたいのですが、実際には「123456」となってしまうのは何故でしょうか・・・?
よろしくお願いします。
0607デフォルトの名無しさん
2008/07/25(金) 04:39:22AnsiString asBuf;
strcpy(chrBuf,"123456");
asBuf = chrBuf;
asBuf.Delete(3,3);
Label1->Caption = asBuf;
とやりたいの?
Caption は AnsiString だから、AnsiString → char * → AnsiString っていう
キャストが行われると思うんだけど、これはわざと?
c_str() で確保されたメモリ空間の寿命は未確定。
コピー先として使うべきではない。
0608デフォルトの名無しさん
2008/07/25(金) 10:30:26AnsiStringを加工に使いたいのですが、挙動を理解しきれてないので・・・。
「http://homepage1.nifty.com/emil/ansistring.html」で、
>char* c_str( )
>文字列をC言語の char* 文字列で返す。返すのはあくまでも char* 型のポインタであり、
>文字列のコピーが作られるわけではない。従って、受け取った char* 文字列を安全に操作したい場合は strcpy( ) などでコピーすると良い。
と、あるのでコピーしたのですが・・・解釈が違ったのかな?
ポインタとして渡せば動作するのですね。
ありがとうございます。
0609デフォルトの名無しさん
2008/07/25(金) 10:35:12は、無理して使う必要は無い。
どうしても使わないといけないときは、AnsiStringとstd::stringの渡しくらい。
例えば、
AnsiString SBuf;
string sBuf;
のとき、
sBuf = SBuf.c_str();
SBuf = sBuf.c_str();
と書く。
それ以外は、「.c_str()」を書かなくても、多分演算子がオーバーロードされてて、簡単に代入できる。
0610デフォルトの名無しさん
2008/07/25(金) 13:51:01解釈が違うと思う。
c_str() で得られたポインタから strcpy 等で
「自分で確保したメモリにコピーする」っていう意味。
そうすれば、自分で確保したメモリの寿命は自分で決められるから。
ttp://www.ne.jp/asahi/nagoya/ahomaro/builder/cpb-016.html
↑も参照してみて。
0611デフォルトの名無しさん
2008/07/25(金) 15:16:04詳しい解説ありがとうございます。
入門書を見ると、「初心者はAnsiStringを使えば簡単」って書いてあるけど、実は取り扱いには注意しないといけないんですね。
暑くて頭があまり回っていませんが、がんばってみます。
0612デフォルトの名無しさん
2008/07/25(金) 15:20:45基本的には常に AnsiString を使って、
API とのやりとりや、標準ライブラリの呼び出しだけに c_str() を使う、
って考え方が良いと思う。
0613デフォルトの名無しさん
2008/07/25(金) 15:48:01なことない。簡単。
■ このスレッドは過去ログ倉庫に格納されています