くだすれC++Builder( ..
293:デフォルトの名無しさん
10/04/28 16:08:51
どたどうしなかよくしようぜぶた
294:デフォルトの名無しさん
10/04/28 18:11:44
なんで、超初心者用スレが荒れているんだ。
超初心者用でない質問スレがなくて、ここが超初心者用だと認識していなかった阿呆のせいか?
295:デフォルトの名無しさん
10/04/29 00:19:57
>285
2010ではString=UnicodeString(UTF-16)となった。hogeがconst char *をパラメータで
受け取る仕様とは食い違いがある。Stringを一旦ANSI(Shift_JIS)に変換してから受け取るか、
const wchar_t *を受け取るように変えるか、どっちかが必要。
>287
2010の新機能である属性(Attribute)の影響かと。
296:デフォルトの名無しさん
10/04/30 14:10:19
すんません
wchar_t filename[256];
::lstrcpy( filename, ExtractFilePath( Application->ExeName ).c_str( ) );
普通にコピーしたいんですがエラー出ます
これwchar用の関数かなにかあるんですか?
297:デフォルトの名無しさん
10/04/30 15:44:38
lstrcpy は Windows Kernel API だから lstrcpyW があるな。
lstrcpy が lstrcpyA にマッピングされている。ということは
UNICODE モードでコンパイルされていないようだから、
よい機会なのでアプリケーション全体を UNICODE モードでコンパイルしてみたら?
ANSI 規格準拠で書きたければ wcscpy で。
C/C++ 言語は10年以上まえから UNICODE サポートを行っているので、必要なものは
そろっていると思ってよいですよ
298:デフォルトの名無しさん
10/04/30 15:47:57
>>297
ありがとうございます。
この機会にアレするとして今後の事を考えると
どういう書き方がいいですかね?
299:デフォルトの名無しさん
10/04/30 16:09:34
プロジェクトの設定ダイアログに
「TCHAR を wchar_t にする」みたいなオプションがあるから
それを有効に。
これで Windows API と関連する部分が UNICODE に切り替わるので
コンパイルエラーが出てきたところを _T 系マクロでラップ。
T マクロを使う分には、ANSI/WIDE 両方で動くコードを作れる「はず」なので
「WIDE モードでエラーをつぶす」
「ANSI に戻して動作チェック」
「WIDE にして動作チェック」
を繰り返す。
最終的に ANSI/WIDE 両方で動く(C/C++)コードができて
WIDE モードでコンパイルすれば UNICODE-VCL との親和性も高くなる。
というところ。
300:デフォルトの名無しさん
10/04/30 16:24:31
>>299
あ、プロジェクトオプションのそれをアレしたら普通にlstrcpyでもコンパイル通った。
基本的にTCHARの設定はアレしないほうがいいんですかね?
これから新たに作るとかのときは
301:デフォルトの名無しさん
10/04/30 16:46:13
なぜコンパイルが通ったかを理解していないと、ちょっと危ないかも。
lstrcpy (を含む Windows API で、文字を扱うもの)は、
lstrcpyA と lstrcpyW が実体として定義、提供されていて、
Windows.H とその配下がマクロ(単純な #define)で plain な lstrcpy にマップしているのです。
296 で提示されているコードでは wchar_t (と c_str())を直に使っているので、
WIDE 版の API である lstrcpyW を明示的に呼ぶほうが素直かも知れません。
ここら辺は各自の判断でよいかと。
302:デフォルトの名無しさん
10/04/30 16:52:31
>>301
色々とありがとうございます。
ちょっとwchar_t等の知識が乏しいのでまずはその辺を勉強してみます。
ご教授ありがとう。
303:デフォルトの名無しさん
10/04/30 16:59:40
「TCHARの設定」は、影響範囲とかがわからない場合には、むやみに変更しないほうがよいでしょう。
以下のコードなら、ANSI でも WIDE でも動きますよ。
TCHAR filename[256];
_tcscpy( filename, ExtractFilePath( Application->ExeName ).t_str( ) );
304:デフォルトの名無しさん
10/04/30 17:00:15
おっと、<tchar.h> を追加するのを忘れずに
305:デフォルトの名無しさん
10/04/30 17:28:33
>>303-304
確かにそれでコンパイル通りましたが・・・
filenameの中身をみてみると??になってました・・・
ちなみにTCHARって1バイトなんですねこれ。
306:デフォルトの名無しさん
10/04/30 17:36:38
CBuilder5では以下のコードはOKでちゃんとmdbファイルが作成されるのですが
CBuilder2010でやるとコンパイルエラーはでないのですが、実行するとアクセス違反エラーが出ます。
Variant cat = Variant::CreateObject("ADOX.Catalog");
cat.Exec(Function("Create") << "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\test.mdb");
これ、どうしたら正常にmdbファイルを作成することができますか?
307:デフォルトの名無しさん
10/05/01 05:57:24
>実行するとアクセス違反エラーが出ます。
どこで?
308:219
10/05/01 09:06:17
HTMLの特殊記号をUnicodeに変換(&を&に変換する)してくれるような
機能はVCLにありますか?
309:デフォルトの名無しさん
10/05/01 10:23:40
>>305
TCHARはマクロ
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif
310:デフォルトの名無しさん
10/05/01 10:28:01
>>305
URLリンク(docwiki.embarcadero.com)
311:デフォルトの名無しさん
10/05/04 11:50:15
初心者ですお勧め参考書教えてください
312:デフォルトの名無しさん
10/05/05 17:01:47
TRegistryのWriteDateTimeとWriteTimeって同じ動作をするような気がするんですが...
WriteTimeにしたからといって引数の日付値が消えるわけではないんでしょうか?
313:デフォルトの名無しさん
10/05/06 10:42:27
>>311
プログラミング初心者かC++初心者かC++Builder初心者かで違う。
前ふたつはできて、C++Builder初心者ならDelphiの参考書とマニュアルのC++拡張見れば十分。
314:デフォルトの名無しさん
10/05/06 21:50:24
C++Builder使ってる参考書ってあんの?
315:デフォルトの名無しさん
10/05/06 22:22:25
>312
WriteDateTimeとWriteDate/WriteTimeは同一の動作。つまり
> WriteTimeにしたからといって引数の日付値が消えるわけではない
で正解。
316:デフォルトの名無しさん
10/05/06 23:12:34
>>314
Amazonで検索してみれば?
317:デフォルトの名無しさん
10/05/07 20:33:39
p
318:デフォルトの名無しさん
10/05/07 20:34:21
>>307
やっとあくきんがとけた
cat.Execの行でエラーでます。
これ何とかなる方法はありますか?
319:デフォルトの名無しさん
10/05/08 02:40:30
アクセス違反エラーを出しているモジュールを知りたかったので、
表示されているアドレス等、一式が欲しかったんだな。
多くのダイアログは、Ctrl-C でテキスト部分がコピーできるので、
気楽に保存できるよ
320:デフォルトの名無しさん
10/05/10 12:22:32
>>319
エラーはEAccessViolationって書いてあるダイアログが出るだけです・・・
321:デフォルトの名無しさん
10/05/11 11:07:17
C++Builder2007か2010でODBCを経由せずに直接DBアクセスする方法教えてください。
あ、DBはアクセスのmdbでいいです。
322:デフォルトの名無しさん
10/05/11 11:13:48
ADOならいいのか
323:デフォルトの名無しさん
10/05/11 11:24:26
dbgo とか ADOTable とか使ってみたら > 321
324:デフォルトの名無しさん
10/05/12 09:49:17
ppp
325:デフォルトの名無しさん
10/05/12 10:59:49
mdbファイル操作について質問ですが
Variant::CreateObject("ADOX.Catalog");を利用して
フィールドの型とサイズを取得する方法を教えてください
326:デフォルトの名無しさん
10/05/12 12:37:07
TMaskEdit の EditMask プロパティを実行時に変更すると
スタックオーバーフローとか例外を吐かれたので解決方法調べてたんだが
AutoSelect = false にすると収まったんで、とりあえずここにチラ裏していく。
ブレークポイント&ステップ実行使うと再現しなくなる例外でしたよ
327:デフォルトの名無しさん
10/05/12 13:28:04
for col in rs.Fields:
col.name, col.type, col.size
328:デフォルトの名無しさん
10/05/12 16:28:43
そんなバグだらけな製品よく使う気になるよな。
329:デフォルトの名無しさん
10/05/12 21:32:42
VCやGCCよりは遥かに少ないけどな
330:デフォルトの名無しさん
10/05/12 22:06:45
2011が出る前に2010買っておいた方がいいのかな
331:デフォルトの名無しさん
10/05/13 15:33:35
>>325を教えて
332:デフォルトの名無しさん
10/05/13 16:15:57
64bit対応版が安定するまでは6Pro使い続ける
333:デフォルトの名無しさん
10/05/14 12:17:12
bcb2007使用しています。
Memo1にAnsiStringに貯めこんだ改行含みの文字列を表示させて計算結果を表示しています。
数が多くなると処理が遅くなっています。高速化の定石があれば教えてください。
Ansi
334:デフォルトの名無しさん
10/05/14 12:20:47
enter押したら投稿してしまいました。
bcb2007使用しています。
Memo1にAnsiStringに貯めこんだ改行含みの文字列を表示させて計算結果を表示しています。
数が多くなると処理が遅くなっています。高速化の定石があれば教えてください。
AnsiString s="";
for(){
…
s+=文字
}
…
for(){
…
s+=文字
}
…
for(){
s+=文字
…
}
Memo1->Text=str;
このような形です。
Memoにはこだわっていません。sのサイズがわからないので、
とりあえず、AnsiStringを使っています。
よい文字格納変数型とよい表示コンポーネントはあるでしょうか?
335:デフォルトの名無しさん
10/05/14 16:26:25
IdUDPServerでいいからsrcポートとdstポートを逆にして送信する方法教えてよ
336:デフォルトの名無しさん
10/05/14 18:11:42
>>334
std::string str;
str.reserve(64*1024);
...
Memo1->Text = str.c_str();
でどうかね。
337:デフォルトの名無しさん
10/05/14 18:18:44
ああそうか
C++BuilderにはStringBuilderがないからか
338:デフォルトの名無しさん
10/05/14 18:28:43
>数が多くなると処理が遅くなっています。
どれくらいの量の文字列を扱っていますか?
文字列処理が遅いのか、描画が遅いのか。をまず分けたほうがよいですね。
Memo1->Text=str;
をコメントアウトして
あと、速度の話をするときは、ちゃんと時間を計りましょう。
LARGE_INTEGER _start, _end;
QueryPerformanceCounter(&_start);
QueryPerformanceCounter(&_end);
__int64 lap = _end.QuadPart - _start.QuadPart;
こんなんで、CPU のクロック単位の経過時間が計れます。
339:デフォルトの名無しさん
10/05/14 21:32:23
334です。
レスありがとうございます。
std::string str; を検討してみたいと思います。(BCBではつかえない?)
時間に関しては、文字蓄積時はあちこちなので、
時間がはかりづらいですが、
コンポーネントへの表示処理とそれまでの計算時間を
指標にして表示処理を時間的に評価してみたいと思います。
計算結果をテキストに表示する手法の常套手段が
知りたいのもありました。
なお計算は動的計画法なるもので、計算量はピンからキリまでありますので、
組み合わせが多い状態の高速化を図る予定です。
340:デフォルトの名無しさん
10/05/15 03:19:55
一般論として。
「速度をあげたい」と思ったら、まずそれを測定することを考えましょう。
測定するために対象を調査していく過程で、問題点そのものが分かってしまう場合があります。
定期的に速度を計測、比較することで、少なくとも、改造の結果かえって遅くなった。ということは
避けられるでしょう。
テストするときは単一データではなく、複数のデータを使うこと。テストデータの量を変えること。
10, 20, 50, 100, 200, 500.... といった (1, 2, 5) パターンがおすすめ。
時間がかかるので端折るときでも、桁が異なる複数のデータ量での計測を忘れずに。
ある程度、対象データ構造、アルゴリズムの癖が分かったら、本質的にどこまで速くなるのか。
を考えてみること。データが(毎回)ディスクから読み取られるなら、ディスクアクセス速度より
速くはできない。(キャッシュとか考えないと)
CPU のキャッシュを超える量のデータを扱うなら、メインメモリのアクセススピードを超えることはできない。
まぁ、ここら辺は厳密に計算する必要はなく、桁合わせ程度の概算で十分ですが、
原理上不可能な速度を追求して時間を浪費するのは避けたいですし、
逆に「もう一桁速くできるはずだ」となるかもしれません。
341:デフォルトの名無しさん
10/05/15 12:27:07
>>334
TStringStreamを使ってみてはどうだろうか?
342:デフォルトの名無しさん
10/05/17 22:05:25
TStringStream
ありがとうございます。
検討中なので結果報告できないですが、ご容赦ください
343:デフォルトの名無しさん
10/05/26 11:40:30
早く>>325を教えろつってんだ!!
344:デフォルトの名無しさん
10/05/26 21:21:46
調査中ですので、あと10年ほどお待ちください。
345:デフォルトの名無しさん
10/05/27 11:04:13
うるせー!
346:デフォルトの名無しさん
10/06/02 14:01:19
HDCをTBitmapにする方法教えて
347:デフォルトの名無しさん
10/06/02 17:25:05
SQLConnectionでmdbファイルをアクセスする方法とかを教えてくださいよ
348:デフォルトの名無しさん
10/06/02 22:59:11
>346
TImagePicture.Bitmap.HandleもHDCなので、ここに向かってBitBltすればいいんじゃない?
349:デフォルトの名無しさん
10/06/03 09:41:54
>>348
できました
350:デフォルトの名無しさん
10/06/04 15:55:05
2007でデスクトップのサイズ(横幅)を超えるフォームを作っても
実行するとデスクトップの横幅と同じサイズになってしまうのですが
これちゃんと指定したサイズになる方法を教えてください
351:デフォルトの名無しさん
10/06/04 18:06:02
さっさと教えやがれ
352:350
10/06/04 19:11:01
はよ、教えろや
役にたたん奴らばぁじゃのぉ
ウンコでも食うとれや
353:デフォルトの名無しさん
10/06/04 22:27:33
ウィンドウはデスクトップサイズを越えることができなかったはず。Windowsの制限。
クレームはゲイツかカトラーにどうぞ。
354:350
10/06/05 05:35:49
>>352
で?
355:デフォルトの名無しさん
10/06/07 10:03:47
VMなんかでホスト側の解像度を超えられないのは馬鹿じゃねとかおもう
356:デフォルトの名無しさん
10/06/11 19:36:52
C++Builderでバージョン情報の自動更新などもない状態で全く同じファイルを
コンパイルするとその都度違うファイルが出来ますがこれは何故なんでしょうか?
357:デフォルトの名無しさん
10/06/12 00:01:15
インクリメンタルリンクしてるからじゃね?
フルビルドすると同じになるはず
358:デフォルトの名無しさん
10/06/12 00:26:02
ビルドの日付が埋め込まれるから異なるとかそんな話か?
359:356
10/06/12 00:56:43
ありがとうございます
インクリメンタルリンクは切ってあります
ステートファイルの作成をしないにチェックが入っていて/Gnオプションがオプションソースに書かれています
でも毎回違うファイルになってしまいます
>>358
そういうことなのでしょうか?
どこかにオプションはありますか?
360:デフォルトの名無しさん
10/06/12 12:26:33
>>359
プロジェクト→オプション→バージョン情報とかじゃね?
ビルドの日付を埋め込むオプションは見つからんなあ
361:デフォルトの名無しさん
10/06/12 13:54:38
>>360
そうですか
バージョン情報のチェックは入ってない状態です
何で微妙に違うファイルが毎回出力されるんだろう
というかこれってうちだけの現象なんでしょうか
362:デフォルトの名無しさん
10/06/12 14:00:13
diffってみたら?
363:デフォルトの名無しさん
10/06/12 16:18:13
WindowsはPEヘッダにタイムスタンプ入るから同じEXEはできない
オプションはない
それでも2バイト前後だから10バイト以上異なるならデバッグ情報ジャマイカ?
364:デフォルトの名無しさん
10/06/12 20:30:52
成る程そういうことでしたか
大体10バイト程度ですが近くにPE\0の文字も確認できるのでそれで間違いなさそうです
勉強になりました
どうもありがとうございます
365:デフォルトの名無しさん
10/06/13 16:08:55
ようやく64bitに対応したね
366:デフォルトの名無しさん
10/06/13 16:12:43
あとはデバッガが動けばねぇ
367:デフォルトの名無しさん
10/06/13 17:11:23
すみませんが、BCB6でfastmmのフルデバッグモードを使うには
どのような設定が必要かご教示お願いします。
FastMM4.pasやFastMM4BCB.cppをプロジェクトに組み込んだのですが、
終了時にメモリリークのダイアログしかでてこないので、どこでリークしているのか
良く分かりません。
368:デフォルトの名無しさん
10/06/13 21:19:22
C++Builder使いじゃないからよくわからんけど、プロジェクトオプションでFullDebugModeを
定義済の状態にしてFastMM関係のソースをコンパイルすればいいはず(*.objか*.dcuを
一旦削除することで)。FastMM_FullDebugMode.dllを配置するのも忘れずに。
369:デフォルトの名無しさん
10/07/02 20:18:11
わかりました。
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4407日前に更新/84 KB
担当:undef