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

C++Builder相談室 Part17

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/08(水) 02:01:27
C++Builderに関する質問・回答や議論等を行う相談室スレッド。

【前スレ】
C++Builder相談室 Part16
http://pc8.2ch.net/test/read.cgi/tech/1138766165/l50

過去スレ・関連サイトは>>2-7あたり。


※Borland C++ Compiler 5.5.1についての質問は以下のスレへ
タダで使えるBorland C++ Part4
http://pc8.2ch.net/test/read.cgi/tech/1091066805/l50
※BDS(Borland Developer Studio)の総合スレはこちら
Borland Developer Studio 2006 No.10
http://pc8.2ch.net/test/read.cgi/tech/1162262669/l50
0391デフォルトの名無しさん2007/05/11(金) 19:19:57
>>390
ありがとうございます!
RequestLiveを Trueで正常に書き込みができました。
ところで質問なのですが、
TQueryならSQLを使うべきですか?
AppendRecordを使っても特に問題はないですよね?
まだDBは不慣れで何をどう使っていいのやらわかっていなくて・・・
0392デフォルトの名無しさん2007/05/11(金) 19:28:10
TQuery+TUpdateSQLの組み合わせの方が
どんなSQLが流れてるか確認できるからいい。
あと、複数のテーブルをジョインしている場合でも
追加や編集、削除ができる。

あ、それからデータベースがOracleとかだと、
Appendや Editがたまにうまくいかないことがあった。
0393デフォルトの名無しさん2007/05/11(金) 19:29:47
TUpdateSQLの使い方については以下のページをどぞ。
Delphiだけど。
ttp://www.wwlnk.com/boheme/delphi/dbtips/css0350.htm
0394デフォルトの名無しさん2007/05/11(金) 19:44:09
>>392-393
ありがとうございます。
そのサイトで勉強してみます!
ちなみにDBはMySQLを使ってます。
0395デフォルトの名無しさん2007/05/11(金) 22:10:15
TurboC++で何か作る度にLibフォルダにvcl100.#00とかvcl100.#0Aとか
増殖してるんだけど、これプリコンパイルヘッダとかいうやつですか?
0396デフォルトの名無しさん2007/05/11(金) 22:14:50
>>395
そうです。タイムスタンプも新しいだろ?
実際時々プリコンパイルヘッダは壊れる事があるので定期的に削除を
お勧めする。*.csmというのもプリコンパイルヘッダ。
0397デフォルトの名無しさん2007/05/11(金) 22:45:52
>>396
ありがとう
csmが数十メガとかなってた
0398デフォルトの名無しさん2007/05/13(日) 12:45:09
ちょっとC++の話になるかもですが
try{
 try{
  if( ...) return false;
 }
 catch(...){
 }
}
__finally{
}
return true;

これってtryのifでreturnしたら__finallyに入らないんですが書き方間違ってますか?
0399デフォルトの名無しさん2007/05/13(日) 14:22:23
>>398
C++の規格に __finally なんてものはない。
0400デフォルトの名無しさん2007/05/13(日) 15:16:07
>>399
んじゃC++Builderの話でいいんだね
んで、これ書き方間違ってる?
0401デフォルトの名無しさん2007/05/13(日) 15:18:57
>>400
ごめん、独自拡張まわりの仕様なんて知らね。
0402デフォルトの名無しさん2007/05/13(日) 15:58:55
おいおい、ここのスレタイを嫁w
0403デフォルトの名無しさん2007/05/13(日) 16:08:20
>>398
入ったよ???
#include <iostream>

main()
{
using namespace std;
try
{
try
{
if(1) return 1;
throw;
}
catch(...)
{
cout << "..." << endl;
}
}
__finally
{
cout << "finally" << endl;
}
}

finally
0404デフォルトの名無しさん2007/05/13(日) 16:45:16
try と __try に違いはあるんですか?
0405デフォルトの名無しさん2007/05/14(月) 08:55:09
>try

ANSI。

>__try (と__finally)

独自文法に使われている。
しかし、某C++、VC++、gccにはあるみたい
0406デフォルトの名無しさん2007/05/14(月) 11:03:20
BCBでの__finally は パスカルユニットを使うのに必要だから導入したのだろ
C++ならスタックにインスタンス取ればデストラクタを自動的に呼べるが
Delphiはヒープにしかインスタンスが作れない。
だから、確実に解放するにはfinallyの導入が必要。

インスタンスを確実に解放するための仕掛けだから、
例外だろうがreturn だろうがgotoだろうが、ブロックを抜けるなら必ず実行されなければいけない。
0407デフォルトの名無しさん2007/05/14(月) 11:39:32
>>403
ぅぅ、やっぱりifのreturnでサックリと関数から抜けちゃって__finally無視されてます・・・
try{
 try{
  if(1) return;
 }
 catch(...){
  Caption = "catch";
 }
}
__finally{
 Caption = "finally";
}
ちなみに、C++Builder5 Proです。
04084072007/05/14(月) 11:46:21
ちなみに、tryの中でreturnではなくて例外でcatchを通るとちゃんと__finallyに入ります
0409デフォルトの名無しさん2007/05/14(月) 11:50:20
>>407
tryを二重に重ねているからだめなんだろう。
内側のtryブロックにも__finallyを書いたらどうか。
04104072007/05/14(月) 11:51:18
さらにちなみに↓の場合でも__finallyに入ってくれます。
try{
 if(1) return;
}
__finally{
 Caption = "finally";
}

以前誰かが↓を最強って言ってたけどなんでうまくいかないのかなあ?
try{
try{}
catch(...){}
}
__finally{}
なにかプロジェクトオプションで設定がいるとかですかね?
04114072007/05/14(月) 11:52:52
>>409
あ、すみません。
それは具体的にはどういうコードになるでしょうか?
0412デフォルトの名無しさん2007/05/14(月) 11:54:31
>>408
BCC5.8.2でやったらちゃんと__finallyの部分が実行された。
0413デフォルトの名無しさん2007/05/14(月) 11:55:33
>>411
いや、>>409は無視してくれ。
俺の所ではちゃんと__finally節が実行されたわ。
04144072007/05/14(月) 11:57:36
>>412-413
すんません、C++Builderで議論をお願いします。
0415デフォルトの名無しさん2007/05/14(月) 12:01:02
>>414
だからC++Builderでやってるって。何ファビョってんの?
04164072007/05/14(月) 12:03:30
>>415
ブチ切れないで下さい><
0417デフォルトの名無しさん2007/05/14(月) 12:04:46
つまり、try __finallyが1つあって、かつtryがネストになってる場合は、
文法が規定されていない。

対処として、
・try __finallyはC++らしくないので使わない
・try のネストは規定されてないので使わない
じゃね?
04184072007/05/14(月) 12:06:19
>>417
それが正解ですね。
0419デフォルトの名無しさん2007/05/14(月) 12:09:02
Delphiからの移植の為だから、
catchとの組み合わせまで考えてなかったんだろな。

catch(...) を __except(true) にすれば動作はすると思うよ
0420デフォルトの名無しさん2007/05/14(月) 12:12:36
BCB5までは動作がおかしいんかな。BCB6とBDS2006では
ちゃんと動くみたいだぞ。
04214072007/05/14(月) 12:13:52
>>419
でもreturnじゃなくて例外ではちゃんといきましたよ。

>>420
BCB6で試してみます。
0422デフォルトの名無しさん2007/05/14(月) 12:28:07
>>420
>ちゃんと動くみたいだぞ。

規定されてない文法に、ちゃんともちゃんとじゃないも無い。

ANSIがこの領域を定めた時点で、コンパイルエラー扱いになったり、
挙動が変更されるとか、ヤバイだけだよ。
0423デフォルトの名無しさん2007/05/14(月) 13:38:53
BCB6にてtry-catchとtry-finallyを5〜6重で使いまくってますが正常に動いてますよ。

ただ、引数で受け取った変数はreturn文でfinallyに入った時に操作しようとすると参照先が無くなっててコケるっぽい。
後処理の中で使用する場合に予め関数内に定義した変数にコピーする必要があった。
04244072007/05/14(月) 14:25:58
>>419
catch(...) を __except(true)にしてやってみました。
確かにreturnで抜けてもちゃんと__finallyに行ったのですが
今度は例外を発生させると「C++ Exception」ってエラーがでます・・・
04254072007/05/14(月) 14:33:05
あ、補足。

例外はthrow 1;で発生させたらC++ Exceptionエラーがでるのですが、
普通?に0除算エラーならちゃんと__excepに入って__finallyに入りました。
これちなみに、わざと例外を発生させたい場合はthrow何て記述すればいいですか?
0426デフォルトの名無しさん2007/05/14(月) 14:35:24
throw Exception("わざと");
04274072007/05/14(月) 14:41:00
>>419、>>426
激しく感謝です!!!
これでやっと思い通りのあれになりました!

色々教えてくれた皆さんに感謝です^^
0428デフォルトの名無しさん2007/05/14(月) 21:21:55
>>427
throw; ってやると受け取った例外を再スローできるのも覚えておいて。
04294072007/05/15(火) 09:58:57
>>428
おはようございます。
え、それは知らなかった・・・
throw;ってやるとそこでエラーが出てたんですよ
だからthrow 1;とかしてた・・・
あ、やばい。この辺の仕様がいまいちわかってない
0430デフォルトの名無しさん2007/05/15(火) 10:00:44
>throw;ってやるとそこでエラーが出てたんですよ

catchの中でやってるんだよね?
それとcatch()の括弧の中も正しく書いてるよね?
0431デフォルトの名無しさん2007/05/15(火) 10:26:26
make***[]Error
これなんのエラー?
04324072007/05/15(火) 10:35:55
>>430-431
いえthrow;はcatchに行かせたくてtryでやってました。
エラーはAbnomal program terminationが出ます・・・
これをthrow 1;とかにするとエラーが出ずにちゃんとcatchに入るのですが・・・
0433デフォルトの名無しさん2007/05/15(火) 10:39:52
>catch

の後ろの( ) はどうなってる?
04344072007/05/15(火) 10:43:55
>>433
catch(...){}
ってしてます・・・
0435デフォルトの名無しさん2007/05/15(火) 10:51:13
>catch(...){}

これじゃ、投げられた例外オブジェクトを、拾ってなくね?
04364072007/05/15(火) 10:55:23
とにかく例外が発生したらそこで止めようと思っていたので
なんでも拾おうとしてたんですが、普通はこういう使い方はしないもんですか?
0437デフォルトの名無しさん2007/05/15(火) 11:01:04
>普通はこういう使い方はしないもんですか?

しません。
何をthrowしたのか受けられないからです。
で、catchってswitch文みたく書けるので、エラーオブジェクトを受ける書き方をして、
該当するところが無かった場合のためにcatch(...)も入れときますがそれはswtich文のdefaultみたいな扱い。
04384072007/05/15(火) 11:10:39
なるほど・・
switch使ってるくせにdefaultのみって感じでしたか・・・
そういう風に言われると確かに意味ないしそんな使い方はしないですよね
はぁ、この辺勉強不足だなあ
気分的には
if (...){
OK
}
else{
ERROR
}
みたいな感じで例外が発生したらオブジェクトが何であろうと全て一括中止処理をと・・・
0439デフォルトの名無しさん2007/05/15(火) 11:16:40
>例外が発生したらオブジェクトが何であろうと全て一括中止処理をと・・・

いや、それは正しいんだけど、エラーオブジェクトをキャッチしなきゃ。
catch(...)だとキャッチしてないじゃん。
0440気まぐれアナスイ2007/05/15(火) 11:17:19
此処ではerror.の出力を教えないのですね?
0441デフォルトの名無しさん2007/05/15(火) 11:18:58
ttp://www5c.biglobe.ne.jp/~ecb/cpp/03_07.html

こういう風に、catch(...)は最後の砦。
0442デフォルトの名無しさん2007/05/15(火) 11:20:49
で、VCLが投げてくるエラーは先ず、
> } catch (Exception &exception) {
で受けなきゃ。

DB系ライブラリとかIndyとかはExceptionクラスを派生したものを投げてくるので、
派生クラスでcatchすれば、もっとエラー情報を取れるお。
0443気まぐれアナスイ2007/05/15(火) 11:21:24
>>440『続』
error.出力を提示して貰った方が分かり易そうです、ね?
04444072007/05/15(火) 11:22:44
>>439
あ、catchに入ればそれでいいとおもっておりました・・・

>>441
参考にさせていただきます。
04454072007/05/15(火) 11:25:18
>>442
なるほど、それで故意に例外を発生させたい場合は>>426でやるってことですね?
0446デフォルトの名無しさん2007/05/15(火) 11:26:16
> } catch (Exception &exception) {

で受けとけば、
exception.Message
にエラーの内容が入ってるんだよ。

VCLがセットした論理的なエラーメッセージの場合もあるし、
Win32APIのエラーコードからエラー文字列を設定している場合もあるし。

だから、exception.Messageを書かずに、BCBスレで質問すること自体反則!
0447デフォルトの名無しさん2007/05/15(火) 11:27:22
>>445
>throw Exception("わざと");
を
> } catch (Exception &exception) {
で受けると、
>exception.Message
の中身は、"わざと"。
0448デフォルトの名無しさん2007/05/15(火) 11:28:51
で、
> } catch (Exception &exception) {
の中で、throw; と書くと、exceptionを投げることになるが、
> } catch (...) {
て書いたって投げるもん無いやん。
あえて言えば、throw NULL; になってるかも。
0449気まぐれアナスイ2007/05/15(火) 11:32:07
>>446
なるほど?
つまり、
>}catch(exception&exception){
取り除く訳ですか?
04504072007/05/15(火) 11:35:27
>>446-447
今Exceptionのヘルプみました。
Messageプロパティにメッセージ入ってました。

>>448
えっと根本が間違ってるかもしれませんが
catch (...)と記述すると投げるものがなくてもcatchに入るので(catch内ではオブジェクトの評価はしない)
とにかくエラーはreturnで返して処理を中止って発想でした
0451デフォルトの名無しさん2007/05/15(火) 17:52:06
誰か…>>388に答えて…
0452デフォルトの名無しさん2007/05/15(火) 18:37:12
>>451
サイズを変更できないウィンドウにしておいて、
プログラムでサイズを変更するようにすればいんじゃね?
0453デフォルトの名無しさん2007/05/15(火) 20:30:06
>>451
どういう状況なのかイマイチ分からんのだが
サイズ変更を抑制してたらどれくらい変更するのか決められないじゃないか
0454デフォルトの名無しさん2007/05/15(火) 21:00:09
WM_ENTERSIZEMOVE, WM_ENTERSIZEMOVEあたりが思い浮かんだ
0455本田2007/05/15(火) 23:36:27
>New C++ IDE from CodeGear^(TM) Brings Rapid Application Development to Windows Vista^(TM)
http://www.codegear.com/article/36464/
>SCOTTS VALLEY, Calif. - May 14, 2007 - CodeGear, a leader in developer tools,
> today announced C++Builder? 2007 -
>the world's only native C++ rapid application development (RAD) integrated development environment (IDE) for Microsoft? Windows.
>C++Builder 2007 provides support for Microsoft Windows Vista,
>enabling developers to seamlessly upgrade existing C++ applications to support Vista
> and rapidly build new Windows applications that take advantage of the new Vista Aero user interfaces.
0456388=4512007/05/16(水) 10:18:39
>>454
SplThx!
0457デフォルトの名無しさん2007/05/17(木) 16:00:47
動的に領域を再確保とかできるあれなんでしたっけ?
なんとかarray?
ヘルプ見たくてもスペルがわからないからおしえてください
0458デフォルトの名無しさん2007/05/17(木) 16:51:30
std::vector
0459デフォルトの名無しさん2007/05/17(木) 19:32:00
TDatabaseを使っているのですが
XPだとちゃんとログインプロンプトがでるのですが
2003サーバーで行うとログインプロンプトがでてきてくれません。
なにか特別なことをするのでしょうか?
0460デフォルトの名無しさん2007/05/17(木) 20:27:19
マルチですいません。こっちの方が素早い解答を頂けそうなので引っ越してきました。
初心者です。教えてください。
visualbasic c++を用いて、デスクトップ上にあるエクセルファイルをオープンして、
中に書いてあるデータをreadwriteしてプログラムで解析かけたいんですけど、
デスクトップ上(あるいはパス指定)にあるファイルをopenする方法を教えてください。
よろしくお願いします。
0461デフォルトの名無しさん2007/05/18(金) 00:56:07
>>460
デスクトップの取得はこれな。Desktopに書き換える。
http://www2u.biglobe.ne.jp/~shinta/cbuilder/_BT_Tips_Ctt.htm#SystemfolderwoSyutokusuru

あとはコンポーネントのOffice2kパネルのやつ使えばできるんじゃね?
0462デフォルトの名無しさん2007/05/18(金) 10:48:13
floatを文字にする時に長さを統一する方法を教えてください。
例えば
1.5、20.9とあったばあいに" 1.5"みたいに1.5の前に1つスペースを入れたいのですが
%2.1fとしたときにxx.x形式みたいな、足らないところにスペースを
0463デフォルトの名無しさん2007/05/18(金) 10:52:38
AnsiString::sprintf()
0464デフォルトの名無しさん2007/05/18(金) 14:01:43
>>463
それ知ってたんですがフォーマットのとこは何てかけばいいですか?
少数無しなら"%3.3d"とかしたらスペースはいるんですが
少数がある場合のそこの記述を教えてください
0465デフォルトの名無しさん2007/05/18(金) 14:03:49
今、昔をふっとおもいだした・・・
そういや"%3.1f"ってかいたら最初の3って全部の長さなんだよね・・・
だから普通に"%5.1f"ってかけばいいだけだった・・・

>>463
ありがとう、サックリとできました
0466デフォルトの名無しさん2007/05/18(金) 15:00:47
>>465
std::stringを使うなら面倒だがマニピュレータを使う方法もある。

#include <iostream>
#include <string>
#include <iomanip>

int main()
{
float f1 = 1.5f, f2 = 20.9f;

std::cout << '\'' << std::setw(4) << std::setprecision(3) <<std::setfill(' ') << f1 << "\'\n";
std::cout << '\'' << std::setw(4) << f2 << '\'';
}
0467デフォルトの名無しさん2007/05/19(土) 15:10:15
プロジェクト名ってハイフンついた名前ってダメだよね?
なんで?
0468デフォルトの名無しさん2007/05/19(土) 15:14:07
コマンドラインオプションと間違えるからじゃね
0469デフォルトの名無しさん2007/05/20(日) 07:26:36
NULとかも使えないっすお
0470デフォルトの名無しさん2007/05/22(火) 16:52:34
データベースなんですけどTQueryでEditしてフィールドに値を書いて
Postの際に「ほかのユーザーがレコードを変更したため編集を実行できませんでした.」
ってエラーが出るのですが、どうしたら書き込む事ができますか?
0471デフォルトの名無しさん2007/05/23(水) 11:03:57
UpdateSQLのModifySQで質問ですが
例えばSTATEというフィールドがあってSTATEの値が1なら0にするSQLにしたばあいにエラーになります。
エラーはUpdateエラーとしかでません・・
しかし条件通りSTATEが1のだけちゃんと0になっています。
これを1レコードしかヒットしない条件にするとエラーがでなくなるのですが
Updateでフィールドの値を変更する時は複数レコードだと何故エラーになるのでしょうか?
0472デフォルトの名無しさん2007/05/24(木) 02:09:12
TIFFファイルをImageに読み込みたいのだけどどうするのがいちばん簡単?
BCB5or6orBDS2006の環境のどれかで・・・
プラグイン?
0473デフォルトの名無しさん2007/05/24(木) 08:42:58
つ ttp://www.logicnet.dk/lib/
0474デフォルトの名無しさん2007/05/24(木) 21:53:39
C++Builderで一番使いやすいと思われるXMLパーサ教えれ。
0475デフォルトの名無しさん2007/05/24(木) 23:12:02
C++BuilderでSQLiteを使用するのに
sqlite3.hをincludeしてsqlite3.dllをDLLloadしようと思うんだが
コンパイルするとヘッダー部でエラーが出てコンパイルできないんだが
この回避方法ってありませんか?
0476デフォルトの名無しさん2007/05/24(木) 23:52:20
>>473
ありがと
いいやつだな

でも、試してみたらコレ目的のフォーマット対応してなかった
モノクロTIFFのG4が使いたかったんよ
0477デフォルトの名無しさん2007/05/25(金) 00:05:12
C++Compiler 5.5
ダウンしたらフォルダの中にexeがなかったのですが
どうすればいいでしょうか?・・・
0478デフォルトの名無しさん2007/05/25(金) 00:08:30
>>477
どのURLからなにをダウンロードしたのか正確に教えてもらえないのに
何と答えればいいでしょうか?・・・
0479デフォルトの名無しさん2007/05/25(金) 00:12:53
>>478
http://72.14.235.104/search?q=cache:95Q74q8y9IIJ:www.borland.co.jp/cppbuilder/freecompiler/+Borland+C%2B%2BCompiler+5.5&hl=ja&ct=clnk&cd=1&gl=jp&lr=lang_ja&client=firefox
からBorland C++Compiler 5.5 ダウソしました
0480デフォルトの名無しさん2007/05/25(金) 00:36:44
どっからダウンロードしてんねんw
しかも俺が嫌いなfirefoxユーザかよ。そんな糞ブラウザ使ってるからダメなんだよ、バーカ。


http://www.codegear.com/jp/downloads/free/cppbuilder
こっちからダウンロードしれ。
0481デフォルトの名無しさん2007/05/25(金) 02:21:50
>>480
IE派ですか
0482デフォルトの名無しさん2007/05/25(金) 08:03:01
IE6 のころは opera をメインにしてたけど、IE7がでてからIE7をメインにしてる。
0483デフォルトの名無しさん2007/05/25(金) 09:55:33
>>475
つ http://members.jcom.home.ne.jp/komina/wiki/4243422F53514C69746533A4F2BBEEA4B9.html#i6
これでいいのか分からんが。
0484デフォルトの名無しさん2007/05/25(金) 15:26:26
すみません、教えてください。
メールサーバーを経由せずにメールを送信する方法を教えてください><
0485デフォルトの名無しさん2007/05/25(金) 16:07:08
>>484
印刷してポストに投函しろ
0486デフォルトの名無しさん2007/05/25(金) 16:26:46
><b
0487デフォルトの名無しさん2007/05/25(金) 17:13:20
馬鹿しかいない時間帯でしたね><
0488デフォルトの名無しさん2007/05/25(金) 17:16:31
うんうんそうだね
おやすみぼうや
0489デフォルトの名無しさん2007/05/25(金) 17:30:44
ほら、馬鹿はすぐ釣れる><
0490デフォルトの名無しさん2007/05/25(金) 17:33:33
>>484
郵便局を経由せずに手紙を出す方法を教えてください

と言うことでしょうか?
■ このスレッドは過去ログ倉庫に格納されています