トップページ⇒tech
946コメント287KB

C++Builder相談室 Part6

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C++Builderに関する質問・回答や議論等を行う相談室スレッド。
過去スレ・関連サイトは>>2-10あたり。


0478デフォルトの名無しさんNGNG
>>477
試してないけど、固定長配列でいいなら、

int i;
TStringList *strlist[100];

// 確保のコード
for( i = 0 ; i < 100 ; i++)
  strlist[i] = new TStringList;


// 解放のコード
for( i = 0 ; i < 100 ; i++)
  delete strlist[i];

じゃないかな?
0479477NGNG
ごめんなさい。
やりたかったことは、TListを使うとうまく行きました。
>>478
やっぱりその方法が一番手っ取り早いみたいですね。

もう使わないけど。
0480デフォルトの名無しさんNGNG
アスペルガー
0481デフォルトの名無しさんNGNG
アスベスト
0482デフォルトの名無しさんNGNG
Unit1.h
−−− ここから
class TForm1 : public TForm
{
__published: // IDE 管理のコンポーネント
TMemo *Memo1;
void __fastcall FormShow(TObject *Sender);
private: // ユーザー宣言
void __fastcall WMDropFiles(TWMDropFiles Msg); //←追加
public: // ユーザー宣言
__fastcall TForm1(TComponent* Owner);

BEGIN_MESSAGE_MAP //←追加
MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,WMDropFiles) //←追加
END_MESSAGE_MAP(TForm) //←追加
};
−−− ここまで

Unit1.cpp
−−− ここから
#include <ShellAPI.h> //DragAcceptFiles()

//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
DragAcceptFiles(Handle,true); //Drag&Drop許可
}
0483デフォルトの名無しさんNGNG
↑はフォームにファイルをドロップするとWMDropFilesが呼び出されるプログラムです
DragAcceptFiles(Handle,true);
では正常に処理されるのですが、たとえば
DragAcceptFiles(Button->Handle,true);
として、ボタンにドロップしてもWMDropFiles内に書いた処理をしてくれません
MLなんかにはここを変えるだけでいいようなことが書いてあるのですが、
何か他にしなければいけないことがあるんでしょうか
0484買ってきたばっかNGNG
Borland C++ 6.0 Personalで
簡単なフォームを作って実行させたところ

[リンカ 致命的エラー] Fatal: ファイル名が必要 :

わかんないっすTT
0485デフォルトの名無しさんNGNG
>>483
WM_DROPFILESはButtonに送られるんだから、
Buttonをサブクラス化するとか、TApplication::OnMessageでWM_DROPFILESを捕らえて処理しないと。
0486デフォルトの名無しさんNGNG
>>484
漏れもなったことがある。
フォームにボタン一個貼っただけなのに、保存してからコンパイルしようとすると
[リンカ 致命的エラー]が出たり。
再インスコしたら直ったけど
0487デフォルトの名無しさんNGNG
>484
原因不明のエラーに対する自分なりの手順。
1)全て保存してやり直す
2)すべてのプロジェクトを再構築してやり直す
3)Builderを一度終了させてやり直す
4)OS再起動させてやり直す

個人的な経験では、再構築で直ること多し。
再インストールはやったことないな。。。
0488486NGNG
>>487
漏れの場合はそれ全部やってもダメだった。
んで再インスコ
0489買ってきたばっかNGNG
>488
再インスコでなおった@@;
アリガトン^^
0490デフォルトの名無しさんNGNG
C#Buidlerってどうなの?
0491デフォルトの名無しさんNGNG
SYOTI_F( char * ) test_time SYORI_P(( const time_t *tp, char *buf ));

とGCCで書いてあるヘッダをC++Builderでコンパイルすると
[C++ エラー] test.h(38): E2293 ) が必要

となってエラーとなる...const が悪い??
ていうかこの部分が何を示しているのか良くわかってない^^;

C++Builderだとどうすれば良いのでしょうか?
0492 NGNG
test.hが必要ってエラーでてるじゃん
0493デフォルトの名無しさんNGNG
>>492
test.h 内で)が必要という意味みたいです^^;
0494デフォルトの名無しさんNGNG
SYOTI_FやらSYORI_Pっていあマクロらしきもののの中身さらさんとわからん
0495_NGNG
http://homepage.mac.com/hiroyuki44/
0496デフォルトの名無しさんNGNG
>>494
typedef int SYORI_P_rewrite SYORI_P(( void *ln, unsigned lnf));
SYORI_Pはこんな感じです。
#define SYOTI_F(type)extern type
となっています。
中身は必要ですか?

0497デフォルトの名無しさんNGNG
絶対SYORI_Pが違う。
#define SYORI_P(x) x
みたいになってるはず。
0498デフォルトの名無しさんNGNG
>>497
typedef int SYORI_P_rewrite SYORI_P(( void *ln, unsigned lnf));
では定義は不可能という事ですか?
0499 NGNG
おそらく
>typedef int SYORI_P_rewrite SYORI_P(( void *ln, unsigned lnf));
これはSYORI_Pのtypedefではなく_rewriteのでは。
そしてSYORI_Pはマクロです。
#define SYORI_P(PAR) (anyfunc)PAR
こんな感じ
0500 NGNG
>#define SYORI_P(PAR) (anyfunc)PAR
これちがうは
0501 NGNG
#define SYORI_P(PAR) (returntype(*)PAR)
こんなんかな
0502デフォルトの名無しさんNGNG
>>499
それがないんですよね〜
SYORI_Pはヘッダファイルのみの使用なんですが
いくら検索かけてもないんですよね

typedef int SYORI_P_rewrite SYORI_P(( void *ln, unsigned lnf));

は理論上成り立つのかなと...SYORI_P_rewrite の別名定義ですよね..
これって,,どうなんでしょw

0503デフォルトの名無しさんNGNG
いや、だから、UNIX系のソースによく見られる _P(...)マクロと一緒でしょ。
プロトタイプが有効なときには展開され、無効(古いコンパイラ)なときには空白にするっての。
だから>>497。
0504_NGNG
http://homepage.mac.com/hiroyuki44/
0505デフォルトの名無しさんNGNG
たぶん、config.hとかで
#ifdef ????
#define SYORI_P(arg) arg
#else
#define SYORI_P(arg) /* */
#endif
みたいになってると思うけど。
0506デフォルトの名無しさんNGNG
ありました...
#define SYORI_P(proc)proc
って感じですが..
0507デフォルトの名無しさんNGNG
説明はなしですか..ww
0508デフォルトの名無しさんNGNG
503に書いた内容じゃ不服か?
0509デフォルトの名無しさんNGNG
問題は
SYOTI_F( char * ) test_time SYORI_P(( const time_t *tp, char *buf ));
マクロとマクロに囲まれたtest_time が何者か分からないわけで..

とGCCで書いてあるヘッダをC++Builderでコンパイルすると
[C++ エラー] test.h(38): E2293 ) が必要

このエラーがなぜ発生するのか分からないわけで..

よろ..
0510デフォルトの名無しさんNGNG
自分で理解できないからって、、

>えっと別スレで聞いたのですが説明なしで自己満足で終わられたみ
>たいなのでこのスレに投げます。

すげーむかついたから、勝手にやってくれ。
0511 NGNG
そのソースが使われてるとこにあるライプラリなどから呼び込んでるかと
0512 NGNG
プ。じゃなっかた。ブだ。
0513デフォルトの名無しさんNGNG

分かっている事ばかり答えてもらってもしかたなか(-.-)
0514デフォルトの名無しさんNGNG
答えるだけ答えさせておいて
バカにして終わりww
自己満足の境地www
0515デフォルトの名無しさんNGNG
定義されているのがtest.h内なら#ifdefの条件をdefineする
config.hならincludeする。

この程度が解決できないようじゃ、
どうせ他のところでもエラーが出て解決できないだろうがね。

>分かっている事ばかり答えてもらってもしかたなか(-.-)
0516デフォルトの名無しさんNGNG
答えるつもりがないのだったら
時間の無駄だからこのスレにでてこないでください
0517デフォルトの名無しさんNGNG
>>515
あのね その程度でつまってるんだったら聞かないでしょって
いってるのに!
0518デフォルトの名無しさんNGNG
みなさん、そんなに興奮しないで下さい...

質問のレベルが高すぎたのかなあ...ww
0519デフォルトの名無しさんNGNG
相互リンク
http://pc2.2ch.net/test/read.cgi/tech/1057580107/68-
0520デフォルトの名無しさんNGNG
>>491
この情報でどうやってわかれって。
0521デフォルトの名無しさんNGNG
>>520
koreigai naniga aruno?
質問に散々こたえたでしょw

0522デフォルトの名無しさんNGNG
デスクトップにあるアイコンより下にフォームを表示する方法を教えて
0523_NGNG
http://homepage.mac.com/hiroyuki44/
0524477NGNG
TListに独自のクラスをAddで追加したんですが
その追加したクラスを取り出すとき、void*型を独自クラスの形式に変換することが出来ません。
独自のクラスに変換するにはポインタを解析して行くしかないのでしょうか?
0525デフォルトの名無しさんNGNG
>>524
"キャスト"という言葉はご存じですか?
0526デフォルトの名無しさんNGNG
>>524
クラスやコンポーネントは実際はポインタだから、普通にキャストできると思うが。
var
 List:TList;
 p:TForm1;
begin
 List:=TList.Create;
 List.Add(Form1);
 p:=TForm1(List.Items[0]);
 List.Free;
 ShowMessage(p.Name);
end;
0527デフォルトの名無しさんNGNG
TStringList *StrList=new TStringList;
StrList->Add("abcdef");
delete StrList;

TList *List=new TList();
List->Add(StrList)
//↑の変数はPublic属性

TStringList* sl=new TStringList;
sl=(TStringList)List->Items[0];
ShowMessage(sl->Strings[0]);
delete sl;

delete List;
これでキャスト出来ないんだけど、ドコが悪いの?
0528デフォルトの名無しさんNGNG
あっ!間違えた。
StrList->Add("abcdef");
//delete StrList;
0529デフォルトの名無しさんNGNG
sl=(TStringList*)List->Items[0];
こうだよん。
0530デフォルトの名無しさんNGNG
それやると、メッセージ表示される前に
フリーズしちゃうんですが…
0531デフォルトの名無しさんNGNG
TStringList* sl;
0532デフォルトの名無しさんNGNG
あー!
List->Addしたあと、delete StrListしてました。
お手数おかけしました。
0533デフォルトの名無しさんNGNG
ところで、何回も同じ変数でnewしても、
その回数だけdeleteする必要ってないんですか?
0534デフォルトの名無しさんNGNG
VCLとCLXの条件コンパイルはどうやってますか?
0535 NGNG
今までパーソナルだったけど気に入ったからProfessional版買ってきてインストールしたけど
起動が滅茶苦茶遅くなった。ペンティアム�Vの733ヘルツだと重いのかな。
0536デフォルトの名無しさんNGNG
要らないパッケージ外したら速くなるよ。それでも重いこた重いけどナー
0537 NGNG
>>536
パッケージが原因なんですか。
そういえばパーソナル版使ってるときに本やWeb上のサンプルをコンパイルしようとしたら
パッケージがないとか言ってコンパイルできないことが多かったよ。
あれはプロフェッショナル版の人が作ってたんですな。
まあ実行時パッケージを使って構築のチェックを外せばだいたいコンパイルできたけど。
でもたくさんコンポーネントが増えてうれしい。
ログが表示できたりCodeGuardが使えたりしてデバッグもぐっと楽になるだろうし。
秋葉原に買いに行ったらVC++.Netの2002年版のやつとVS.Net2003Professionl限定アップグレード版をセットで買うと
5万弱で買えるってお勧めの商品になってて迷ったけどこれでよかったんだよね、多分??
でも1万円以上高いのはちょっと痛いな。あっちはC++とC#とVBもついてるし。
0538デフォルトの名無しさんNGNG
今、悩んでいるのだけど
これからc++を始める人にとっては「c++builder」と「visual c++」の
どちらを選択すべきであろうか。
自分の中では「visual c++」がメジャーと思っていたので他の選択肢を考えていなかった。

「visual c++」の方が本や情報など探しやすい気がする反面で
「c++builder」を勧める人の方が多い気がもする。

先輩方のアドバイスを求む。
0539デフォルトの名無しさんNGNG
>>538
取り敢えず、このスレの主旨から言って、やはりBCBではないかと
ちなみに、VCのスレで聞かれたらVCを進める
理由は>>538だけじゃ、何に使うか分からんし
使い方によっては、gnuで充分だったりするので
0540538NGNG
聞かれる気もしていたのですがあえて明記しませんでした。
まずはフリーソフトみたいな物を作りたいです。
考えているのはHP巡回ソフトの「WWWC」みたいなソフトです。
おそらくこれが完成するのにかなりの時間がかかるでしょう。

その後はDirectX関係を勉強してゲームもどきみたいな物を制作したいです。
単にキャラクターをパッドで操作できるだけの簡単な物でいいです。

こんな予定があるのですがどっちのc++がよいですかね?
0541デフォルトの名無しさんNGNG
まず、無料のコンパイラをDLしてC/C++というものをある程度理解して
それからWindowsなりネットワークなりだな。
0542ミ,,゚Д゚彡 ◆A6VzDeLphI NGNG
同系ソフトにVCL製の
WWWDってのもあります。

情報をたくさん集めて判断すると
より後悔しない選択が出来るんじゃないかな。
0543デフォルトの名無しさんNGNG
そうだな。
フリーの環境 BCC55/Delphi/Java落としていろいろやってみてから 有償のものを買えばいい。

よく、お金出した方が真剣になるからなんて言い方する奴がいるが、
そんなものは幻想だ。
0544デフォルトの名無しさんNGNG
coutやcerrに出力してるソースがありますが、
それらを標準入出力でなく、TMemoとかに出したいでつ。
BCBで出来ますか?
0545544NGNG
というか、
「cout << "Hello world." << endl;」
が、どこにも表示されません。

いったいどこに出力されてるのだろう?

0546デフォルトの名無しさんNGNG
それは君の心の中にあるのです。
0547デフォルトの名無しさんNGNG
>>545
コンソールアプリケーションを選択すれば出力される。
0548デフォルトの名無しさんNGNG
AnsiStringってもしかして怖い?
0549デフォルトの名無しさんNGNG
>>548
どういうこと?
0550デフォルトの名無しさんNGNG
普通に使ってるZE!
0551デフォルトの名無しさんNGNG
>>548
怖くはないよ。すごく便利。
0552デフォルトの名無しさんNGNG
BCB3proにあったSQLビルダー、
BCB4以降Enterpriseにしかつかなくなったけど
proで使えるSQLビルダーないですか?
0553デフォルトの名無しさんNGNG
>SQLビルダー

って何するもんですか?

ウィザード形式で、

データを取得する表を選択して下さい
取得する列を選択して下さい
抽出条件を指定して下さい

→SELECT hoge FROM huga WHERE nullpo

みたいな?
0554デフォルトの名無しさんNGNG
そう。
またプログラム実行しなくても、
SQLビルダー内でクエリの結果も表示できるし
その結果をエクセルなどに簡単にコピペできたので
ちょっとした抽出なんがすごく便利だった。
おまけに、そのSQL文もウィザード形式で
作ってくれた。
だからBCB3以降使ってない。
SQLビルダーの復活を願いたい。
0555538NGNG
アドバイスどうもです。
>542
自分はwwwcよりwwwdを使っているのですがwwwdに不満があって作ってみようかと(笑

もうちょっと考えてみますね。
0556デフォルトの名無しさんNGNG
TStringList *sl=new TStringList;
sl->Add("AAA");
ShowMessage(sl->Strings[0]);
sl=new TStringList;
sl->Add("BBB");
ShowMessage(sl->Strings[0]);
delete sl;
こんな事した場合、メモリは2回取得されるんでしょうか?
それとも、同アドレスの変数が初期化されるだけでしょうか?
0557デフォルトの名無しさんNGNG
同アドレスの変数が初期化?
意味はワカランが、とりあえずメモリリークしてる。
0558デフォルトの名無しさんNGNG
>>556
2回別々に確保され、一回目のものはリークして2回目のものだけ開放される
0559デフォルトの名無しさんNGNG
やっぱり…
TListにドンドン追加してるんだけど、
追加し終わったあと(例えばTStringList)Deleteするとフリーズしてしまうんですが。
どうも、TListがコピーされたはずの物を参照せずに、コピー元ばかり見ているようなそんな気がします。
これじゃTListの意味がワカランのですが?
0560デフォルトの名無しさんNGNG
>追加し終わったあと(例えばTStringList)Deleteするとフリーズしてしまうんですが。

ソース出せ。お前の日本語ではらちがあかん。
0561デフォルトの名無しさんNGNG
>>559
コピー・・?
ポインタはいくらコピーしても指す先の同じものしか参照しないし
TListに格納するのはポインタなわけだが・・
0562デフォルトの名無しさんNGNG
>TListに格納するのはポインタなわけだが・・

と、言うことはTListはポインタのポインタと言うことですね?
0563デフォルトの名無しさんNGNG
>>562
>>560
0564デフォルトの名無しさんNGNG
TListだけをdeleteしてたりして
0565デフォルトの名無しさんNGNG
ボーランドのTListの例です。
new して追加した後、deleteしてないんですが…
0566デフォルトの名無しさんNGNG
>>565
気のせいでしょう。
0567デフォルトの名無しさんNGNG
!ごめんなさい。
forの所削ってました。(w
0568デフォルトの名無しさんNGNG
>>551さん
そうですか。
じゃ、構造体の問題かな・・・。

struct unko{
int i;
char hoge[8];
char chinko[4];
};

unko shitai;

strcpy(shitai.chinko,"chin");
strcpy(shitai.hoge,"hogehoge");

AnsiString aschinko;
aschinko=AnsiString(shitai.chinko);
ShowMessage(aschinko);

shitai.chinko の1バイト目が\0 になるんです。
基本的なことかもしれませんが、アドバイスあったらお願いします。


0569デフォルトの名無しさんNGNG
>>568
char hoge[8]; // 8バイトである
char chinko[4]; // 直後にある

strcpy(shitai.chinko,"chin"); // 5バイト書き込む(最後は '\0')
strcpy(shitai.hoge,"hogehoge"); // 9バイト書き込む(最後は '\0')

ここで shitai.chinko[0]は '\0'になる
0570デフォルトの名無しさんNGNG
あ、順番を
strcpy(shitai.hoge,"hogehoge");
strcpy(shitai.chinko,"chin");
したらOKだ。


勉強しなおしてきまつ。
0571568NGNG
>>569
そうでした。ありがとうございました。
今、ソケットで上記shitai を送信して受信してるのですが、
受信先でかならずある特定のcharの頭が'\0'になるのに悩んでるのですが、
手がかりを見つけたようです。
ただ。。送信直前では'\0'は入ってないんです。もっかい見直しマス。
0572デフォルトの名無しさんNGNG
>今、ソケットで上記shitai を送信して受信してるのですが、
冗談はよせよ。あまりおじさん達をからかうなよ。
0573ppNGNG
>>572
横レス
冗談といいますとpp(興味津々)
0574538NGNG
「c++builder」か「visual c++」で悩んでいた者ですが「c++builder」に決めました。
決め手は
本家や ttp://www.borland.co.jp/cppbuilder/competitive/comparison.html
ここの ttp://www.zdnet.co.jp/developer/0307/04/dvn01_3.html
ページにある「visual c++」ではGUIアプリケーションの構築に労力がかかる、という点で。

なんか相手の罠にかかったような感じですが(笑)、「c++builder」でがんばってみます。
0575デフォルトの名無しさんNGNG
TOpenDialog OpenDlg=new TOpenDialog(this);

こうすれば、解放処理delete OpenDlg;しなくていいんですよね。
0576デフォルトの名無しさんNGNG
たしかにthisが開放されるときに勝手に開放されるが、それまでは残りっぱなし。
0577デフォルトの名無しさんNGNG
手動作成の一時的なダイアログ用なので
それだけ教えていただければ十分です。
■ このスレッドは過去ログ倉庫に格納されています