[Tips]Borland C++Builder ちょいテク No.01
■ このスレッドは過去ログ倉庫に格納されています
00011
2006/08/03(木) 13:43:29そんなちょっとしたテクニックやTips(秘訣)を紹介するスレです。
プログラミングのQ&Aは
C++Builder相談室 Part16
http://pc8.2ch.net/test/read.cgi/tech/1138766165/
くだすれC++Builder(超初心者用)その2
http://pc8.2ch.net/test/read.cgi/tech/1144308804/
関連スレ
Borland Developer Studio 2006 No.07
http://pc8.2ch.net/test/read.cgi/tech/1154069526/
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc8.2ch.net/test/read.cgi/tech/1093654251/
0153デフォルトの名無しさん
2007/07/01(日) 22:46:36それを見たとき、真っ先に思い浮かべたのはこれ↓だった。
「…僕が一番Delphiをうまく使えるんだ。一番、一番うまく使えるんだ…」
http://www.geocities.co.jp/AnimeComic-Pastel/3829/words19_Gundam.html
0154デフォルトの名無しさん
2007/07/02(月) 12:44:56今どきの、MDIともちょっと違う気持ち悪いサブウィンドウ構成がデフォルトだけど、
フォームエディタやコードエディタを独立したウィンドウにできないのかしらん。
(記憶あいまいだけどDelphi6/BCB6ではオプションから変更できたような)
0155154
2007/07/02(月) 16:04:30お騒がせしました。
0156デフォルトの名無しさん
2007/08/05(日) 00:52:06むちゃくちゃ感じの悪いヤツだな、その作者。
0157デフォルトの名無しさん
2007/11/17(土) 10:42:330158デフォルトの名無しさん
2007/11/17(土) 13:02:56Delphiが用意したクラスって、iostreamとかもダメ?
0159デフォルトの名無しさん
2007/11/18(日) 11:12:58問題が出る可能性があるのはパス名にShiftJIS外の文字(アラビア語や韓国語など)が含まれてファイルシステムがNTFSの場合だけだとおもう。
0160デフォルトの名無しさん
2007/11/18(日) 11:15:25まあ文字化け起こして、意図せずに既存ファイル名とかぶる場合があり得る程度(特に半角カナ)
0161デフォルトの名無しさん
2007/11/20(火) 18:35:54特に、Macでのコンパイルはどうやんのか、とか。
0162デフォルトの名無しさん
2007/11/20(火) 23:22:42ftp://bekins.borland.com/groups/jp/events/devcamp/07/a3.pdf
0164161
2007/11/21(水) 13:08:38実際にセミナー見られた肩、レポートお願いしますorz
0165デフォルトの名無しさん
2007/11/22(木) 09:23:23ShiftJIS範囲内の文字しか使われない
とかどうやってユーザーを制限する気なんだろうね。もう、あほかと。
0166デフォルトの名無しさん
2007/11/22(木) 09:34:340167デフォルトの名無しさん
2007/11/23(金) 09:29:54意味不明。
0168デフォルトの名無しさん
2007/12/31(月) 09:13:11この先使い続けてても大丈夫ですかね?
反Microsoft派の意見が、まかりとおってて、口出しできません。
ほんとはVisualC++使いたいのに。
参考書の数も圧倒的に違うのに。
0169デフォルトの名無しさん
2007/12/31(月) 13:00:53boostの通りが悪いくらい。
しかもTurboC++の方がGUIは.NET無しでVBみたいに作れるから楽。
0170デフォルトの名無しさん
2007/12/31(月) 13:09:06そんな会社辞めちゃえよ。でVCやってる会社に行けば、現状がいかに恵まれてるかがわかる。
0171デフォルトの名無しさん
2007/12/31(月) 13:38:330172デフォルトの名無しさん
2008/01/12(土) 14:18:460173デフォルトの名無しさん
2008/02/02(土) 22:22:490174デフォルトの名無しさん
2008/02/15(金) 10:06:04Stringはコンポとアクセスする前までstd::string使えば良いし、
Exceptionは直接使わずに派生したエラークラスを使ってgcc側ではlogic_exception/runtime_exception派生したものを使えば良いことは分かりました。
が、最後の難題はTStringListです。
結構コアな文字列解釈にTStringListをSTLベースに書き換え前途多難、某にはめられますた。
おまいら、クロス用のTStringListどこにあるか教えて下さい。
もしくは純粋C++やSTLでTStringList作って下さい。
0175デフォルトの名無しさん
2008/02/15(金) 10:30:16要素単位でコピーじゃ駄目なん?
#include <iostream>
#include <vector>
#include <vcl.h>
#pragma link "rtl.lib"
#pragma link "vcl.lib"
int main(){
TStringList* dest = new TStringList();
std::vector<std::string> src;
src.push_back("1行目");
src.push_back("2行目");
src.push_back("3行目");
src.push_back("4行目");
for(int i = 0; i < src.size(); i++) {
dest->Add(AnsiString(src[i].c_str()));
}
for(int i = 0; i < dest->Count; i++) {
std::cout << dest->Strings[i] << std::endl;
}
delete dest;
return 0;
}
0176174
2008/02/15(金) 10:35:470177デフォルトの名無しさん
2008/02/15(金) 13:48:42おれも昔作ったよ。
STLべースでさ。
Values/Names/IndexOf/CommaText
こんなのなんて簡単に自力で作成できるじゃん。
0179174
2008/02/15(金) 14:13:35だけでも欲しぃお( ^ω^)
0180174
2008/02/15(金) 14:36:330181174
2008/02/15(金) 14:46:460182174
2008/02/15(金) 14:48:37上はニセ174です。
0183174
2008/02/15(金) 15:07:50↓
0184デフォルトの名無しさん
2008/02/15(金) 15:11:060185デフォルトの名無しさん
2008/02/15(金) 15:53:280186デフォルトの名無しさん
2008/02/15(金) 20:20:25std::string.substrは0ベースで、
あってますか?
0187デフォルトの名無しさん
2008/02/15(金) 20:41:580188デフォルトの名無しさん
2008/02/15(金) 21:24:09自分で試したほうが絶対速いじゃんかーー
0189デフォルトの名無しさん
2008/02/15(金) 21:28:250190デフォルトの名無しさん
2008/02/16(土) 00:32:320191デフォルトの名無しさん
2008/02/16(土) 02:16:450192デフォルトの名無しさん
2008/02/17(日) 14:20:46http://archives.free.net.ph/message/20071213.140751.41186719.ja.html
あと、連想配列ならmapとかunorderd_mapがあるから、
それで済む程度のことなら、自分でコードを書く必要がない。
0193デフォルトの名無しさん
2008/02/17(日) 15:46:260194デフォルトの名無しさん
2008/02/17(日) 21:50:49環境:WindowsXP/C++Builder5
Imageコントロールに延々とグラフを描画するプログラムを運用中のですが、
突然、描画が出来なくなってしまう現象が発生しています。
一度この現象が出ると、プログラムを再起動しないと復旧しません。
止まるもの、規則性が無く、極端には一回目からグラフの描画が途中で
止まったりします。
これは、バグなのでしょうか?
また、何とか対応したくて、Imageコントロールを動的に取得して描画しようと
したのですが、デバッグでブレーク張っていると、問題なく動くのですが
ブレークをはずすと例外エラーが出てしまうのです。(NTDLL.DLLで)
何とかImageコントロールへの描画不具合を直せないでしょうか?
宜しくご指導をお願い致します。
0195デフォルトの名無しさん
2008/02/17(日) 23:01:400196デフォルトの名無しさん
2008/02/21(木) 10:25:48もしかしてスレッド作って描画していない?
片方のスレッドで描画して、メインスレッドで画面に表示なんてやってると良く落ちるよ。
スレッドではTBitmapに描画しておいて、Synchronizeか、メインに対してメッセージを投げて
画面表示の部分だけは同期させるとかさ
0197デフォルトの名無しさん
2008/02/21(木) 10:56:450198デフォルトの名無しさん
2008/02/21(木) 13:06:47大昔に出来た基礎に増築しまくっていじるにいじれなくなってるのがVCLなんだから
酷いプロジェクトの見本だな
0199デフォルトの名無しさん
2008/02/21(木) 13:11:36なわけねーだろ、オブジェクトにアクセスするときにはミューテックスとかセマフォとか取得するだろーが。
0200デフォルトの名無しさん
2008/02/21(木) 13:37:27妄想としてOOPでもスレッド同士でメソッド呼び合えるようなものを考えてるんだろうけど、まあ夢は夢。
VCLのように委譲(イベント)を使いまくる場合、
基本的にダブルポインタが必要なわけ。 メソッドポインタって奴ね。
つまりオブジェクトと、関数アドレスの2つが必要になるわけね。
ポインタ1個だけなら同期とかは必要ないけど、2つになると、これはどうしようもない。
スレッドセーフにする為に、イベントに代入するような場面全部に同期対策入れろって思う?
思わないでしょ?
メソッドポインタ一つでさえコレなんだから、スレッド同士でメソッド呼び出しってのは基本的に無理
関数型言語なら、ある程度は可能かもしれないけどね
0201デフォルトの名無しさん
2008/03/06(木) 00:23:00...
delete hogehoge;
ってコードをよくみるが、
TStringList hogehoge;
でdeleteなしってダメなんか?
0202デフォルトの名無しさん
2008/03/06(木) 00:52:130203デフォルトの名無しさん
2008/03/06(木) 01:44:110204デフォルトの名無しさん
2008/03/06(木) 01:52:16スタックにおけないのか?kwsk
0205デフォルトの名無しさん
2008/03/06(木) 09:52:23ヘルプに書いてある
0206デフォルトの名無しさん
2008/03/06(木) 10:01:51>String
これって便利なんだけど、クロス環境で開発してると害悪になる。
下はstringの代用があるけど、上は自作する必要があるorz
0207デフォルトの名無しさん
2008/03/06(木) 10:29:41別にTStringListそのものである必要なんて殆どないんだろうし
1時間もあれば書けるだろ
0208デフォルトの名無しさん
2008/03/06(木) 10:47:450209デフォルトの名無しさん
2008/03/06(木) 10:52:081時間では絶対に無理
俺は結局1日半くらいかかった。
0210デフォルトの名無しさん
2008/03/06(木) 12:56:420211デフォルトの名無しさん
2008/03/06(木) 13:01:340212デフォルトの名無しさん
2008/03/06(木) 13:09:48Values、Names
とか
CommaText入出力
とか、
LoadFromStream/File
とかあるから、
代替品を作るときにイパーイ機能を実装しないといけないし、
posとfindとイマイチ似てないところや、
無意識にthrow Exceptionすれば良かったのをクロスでどうするとか、
考えるの大変、差し替え後テスト大変。
0213デフォルトの名無しさん
2008/03/06(木) 13:11:49まあ IStrings のCOMインターフェース連携機能は諦めるとして
0214デフォルトの名無しさん
2008/03/06(木) 13:13:03それら使い方知らないってのは勘弁してくれw
0215デフォルトの名無しさん
2008/03/06(木) 13:15:29バラバラに持ってても意味無いんだよ。
0216デフォルトの名無しさん
2008/03/06(木) 13:15:460217デフォルトの名無しさん
2008/03/06(木) 13:18:17なんでバラバラに持っていては意味ないのかわからない
余程の無能じゃなければラッパー部のテストなんてすぐ可能だし、時間がかかる理由がない
逆に教えてくれw
0218デフォルトの名無しさん
2008/03/06(木) 13:21:35boostのSpiritでやるのか? なんか牛刀持ち出してるように思うが1時間で書けるの?
IStringsはATLだが これも STLの一種だと言い張るわけか
0219デフォルトの名無しさん
2008/03/06(木) 13:22:530220デフォルトの名無しさん
2008/03/06(木) 13:29:02CommaTextなんてtokenizer使えばすぐ
つーか、クロス開発するときにTStringListの置き換えに困るという話なんだから
>>206が言っているようにStringの代替にstd::stringを使えるレベルでいいなら余裕でしょ
IStringsAdapterが、とか持ち出すのは滑稽w
全体的なテストはまた別の話だし、TStringList関係なく必要だから
0221デフォルトの名無しさん
2008/03/06(木) 13:39:36クラスのメンバ変数となってたりするわけだから。
0222デフォルトの名無しさん
2008/03/06(木) 13:50:190223デフォルトの名無しさん
2008/03/06(木) 13:52:22TStringListの仕様はガチガチに決まってるところを、
類似クラス作成するときどこまで同じにするかで悩んだり。
0224デフォルトの名無しさん
2008/03/06(木) 13:54:52クロス開発するような人なら手持ちにあるはずなんだけどな・・・
0225デフォルトの名無しさん
2008/03/06(木) 13:57:16誰でも一番初めは作らないといけないだろ。
反論になってない。
0226デフォルトの名無しさん
2008/03/06(木) 13:58:13初心者がBCB難しいって言ってるのと同じ
0227デフォルトの名無しさん
2008/03/06(木) 17:08:300228デフォルトの名無しさん
2008/03/06(木) 18:04:250229デフォルトの名無しさん
2008/03/07(金) 08:14:020230デフォルトの名無しさん
2008/03/07(金) 14:16:070231デフォルトの名無しさん
2008/03/07(金) 15:40:380232デフォルトの名無しさん
2008/06/24(火) 10:59:31でビルド自動化
0233デフォルトの名無しさん
2008/07/04(金) 20:56:47ざっと見メモリリークもなさそうですし、CodeGurardでも警告ないんですが。
0234デフォルトの名無しさん
2008/07/04(金) 22:39:010235233
2008/07/07(月) 10:01:24UniDirectionalで使用メモリ量が変わるのですね。
影響ありませんでした。 → 従って、TIBQueryのメモリリークじゃないってことです。
良く考えたら、TImage等を使って巨大なビットマップを作成やコピーしているアプリだと気付きました。
TBitmap系のメモリリークを防ぐテクニックがあれば教えてほしいです。
0236デフォルトの名無しさん
2008/07/07(月) 21:59:53断片化が原因かも。
0237233
2008/07/08(火) 08:55:17あ、断片化でOutOfMemoryが出ることがあるんですか。
勉強になりました。
BCB6なのでFasmMMは標準で入っていません。
数年以内には最新版に逝行するつもりです。
0238233
2008/07/08(火) 09:49:00一応調査はこれで終わろうと思います。
が、この際周辺情報も入手しておきたかったり:
・断片化状態調査ツールなんかないですよね?
・断片化メモリを解放するメソッドはやっぱり無いですよね。
・FastMMにすると断片化を防げるわけですか。
0239デフォルトの名無しさん
2008/07/08(火) 16:19:350240デフォルトの名無しさん
2008/07/08(火) 18:07:42ぎりきりのメモリ確保をすれば連続したメモリ領域に確保され直される
と思うが
0241デフォルトの名無しさん
2008/07/08(火) 21:22:26FastMMでメモリアロケートの情報を取得できたような気もする。あとメモリ確保のストラテジが標準のものと
異なり、いまどきのメモリがそこそこある状況に最適化されていたはずなので断片化がおきにくいとは思う。
いずれにせよC++Builder 6でも使えるはずなのでまずは試してみてはいかがか?
0242233
2008/07/10(木) 10:32:26メモメモ、すごい勉強になったけど、、、
そんなんあり?_? orz
>>240
そう思うんですけど、現象からはそれを破壊している何かが起きているような。。。
>>241
言われる通りです。
先延ばししても同じ問題が発生したら結局原因追究&対処しなきゃならないんですよね。
0243デフォルトの名無しさん
2008/07/10(木) 11:21:11なんというか、MS-IME はこういう状況らしい。
ttp://magredirect.itmedia.co.jp/r/5Gf/1B/43/1/pcuser/articles/0805/22/news055.html
0244デフォルトの名無しさん
2008/07/10(木) 11:53:150245デフォルトの名無しさん
2008/07/12(土) 00:16:200246デフォルトの名無しさん
2008/07/12(土) 11:59:20「うちのほうが頭がいい連中が多いしIMEはまとめて作りますよ」とかいう言葉に乗せられちゃたんだろな。
0247デフォルトの名無しさん
2008/08/01(金) 11:28:410248デフォルトの名無しさん
2008/08/09(土) 23:26:48試しに、プロジェクトにDelphiのソースを突っ込んでみたら
.hppファイルが自動生成されて、ビルドがちゃんと通った。
Delphiの変数宣言って、C++のポインタ宣言と同じで実体は生成されないんだね。
C++ならnewするのを、DelphiはCreateするって違いなんだね。
だから、VCLにはCreateメンバ関数が無いんだね。
0249デフォルトの名無しさん
2008/08/10(日) 01:24:36単純なDelphiプロジェクトなら、プロジェクトマネージャに構成ユニット放り込めばビルド通るぞ。
0250デフォルトの名無しさん
2008/08/15(金) 15:45:380251デフォルトの名無しさん
2008/08/15(金) 16:20:450252デフォルトの名無しさん
2008/09/09(火) 15:50:55BCB6でサービスプログラムを作ったのですが、
有る処理で
Application->ProcessMessages();
と同様の処理をしないといけなくなったのですが、
Application->ProcessMessages();
を記述すると TServiceApplication のメンバーで無いと怒られてしまいます。
なにか他に ProcessMessages と同様の操作する方法ないでしょうか?。
■ このスレッドは過去ログ倉庫に格納されています