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

C++Builder相談室 Part5

■ このスレッドは過去ログ倉庫に格納されています
0001owlNGNG
C++Builderに関する質問・回答や議論等を行う相談室スレッド。
過去スレ・関連サイトは>>2-4あたり。
0159158NGNG
エラーメッセージからみて、「"-" または "+" の文字」こっちだなぁ。
BCB6 SP4 以降を当ててください。
0160デフォルトの名無しさんNGNG
SP4あてて日本語環境はどうよ?
0161デフォルトの名無しさんNGNG
>>160
べつに問題ないけど?
0162デフォルトの名無しさんNGNG
>>161
バージョン情報が英語になっているだけ(w
0163デフォルトの名無しさんNGNG
throw std::runtime_error("error");
とか書いても、エラーメッセージに「C++ Exception.」と出るだけです。
自分でcatchして情報を取り出さないといけないのでしょうか?
0164デフォルトの名無しさんNGNG
C++には最上位クラスがないから当然最上位例外クラスも無いわけで
処理系が自動的にメッセージを表示するのは無理。
0165デフォルトの名無しさんNGNG
>>163
普通catchがないとuncaught_exeption()が呼び出されるんじゃ
なかったっけ。
0166デフォルトの名無しさんNGNG
uncaught_exception()だった。スマソ
0167デフォルトの名無しさんNGNG
>>165
どっちにしてもコンパイラが例外の種類に応じて
自動的に適切な文字列に書式化して表示するのは無理。
0168163NGNG
あ、そう。無理ですか。
じゃ、catchでの文字列の取り出し方とかキボンニュ。
0169デフォルトの名無しさんNGNG
>>168
what()
0170デフォルトの名無しさんNGNG
Delphi例外を投げるのではダメなのか?
0171163NGNG
>>170
Win以外の開発が多くなったもんで。
テスト用にBCBツカテルダケ。
Linuxが多くなったら、またKylixに戻る予定。
0172デフォルトの名無しさんNGNG
>>171 キャッチしたら Delphi例外を投げ直したら?
0173163NGNG
>>172
だから、runtime_errorのキャッチのコードキボンニュ。
文字の取り出し方知らないしー。
0174デフォルトの名無しさんNGNG
>>173
ヘルプくらい読めよ。
0175163NGNG
ごめん。169って煽りじゃナカタノネ。

catch (const exception& e)
e.what()
0176163NGNG
でもなんか、コンパイル通らないし...
0177デフォルトの名無しさんNGNG
>>175
ああ、もう少し具体的に書けば良かったかな。
もしかしたら what? (何だって?) と誤解されるかと書いた後で思った。
what()という名前のメンバ関数だから仕方ないね(w
0178デフォルトの名無しさんNGNG
>>176
例えば

#include <iostream>
#include <stdexcept>

void func() throw(std::exception)
{
throw std::runtime_error("error");
}

int main()
{
try {
func();
}
catch (const std::exception& e) {
std::cout << e.what() << std::endl;
}
}
0179163NGNG
お、コンパイル通った、thanx!>>178

てゆうか、某のヘルプstd::exceptionのstd::が抜けてるしー。
0180172NGNG
むう・・・まさか、そんなレベルで転んでるとは思わんかった。 スマンな
0181デフォルトの名無しさんNGNG
BCBと他コンパイラの共存が必要なとき、__finallyはどうしてます?

VC++にはあるとおもうけど、VC++なんかは要りません。
0182デフォルトの名無しさんNGNG
>>181
finallyなんて使わずにcatchで我慢
0183デフォルトの名無しさんNGNG
>>181 スマートポインタか、その場で構造体宣言してデストラクタで処理
0184153NGNG
>>155
BCB1以降,バージョンアップの際に自動で行われるファイルの
アップデートで何度か痛い目に遭っているので,古い環境も
なかなか捨てられないのですよ….全部新しいverで動くか検証
するとしたら,3桁くらいのプログラムをコンバートして調べな
いといけなくて…

>>158
ビンゴでした.
Projectファイルを "c++" なんていう名前を付けたフォルダの下に保存し
ていたため,絶対パスに"+"が含まれていて,ver6のでは引っかかっていた
ようです.ver6のみ入れたマシンはそんなことしていなかったので,大丈
夫だったというオチでした.

updateを適用してみます.
どうもありがとう.助かりました.
0185デフォルトの名無しさんNGNG
BCB6にIndy9.0.11入れてみた。
で、TIdHTTP貼り付けて
IdHTTP1->Get("http://example.com/");
でコンパイルは通るんだけど
[リンカ エラー] 外部シンボル '__fastcall Idhttp::TIdHTTP::Get(System::AnsiString)' が未解決
って怒られます。

何ででしょう…
0186デフォルトの名無しさんNGNG
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

  IdHTTP1->Request->UserAgent = "Mozilla/4.5 [ja] (WinNT; I)";

  Memo1->Lines->Text = IdHTTP1->Get("http://pc2.2ch.net/test/read.cgi/tech/1045542179/l10");

}
//---------------------------------------------------------------------------
としてみたが問題なくコンパイルできるし動いてるよ
9.0.11だす
0187デフォルトの名無しさんNGNG
>>185
Indy9.0.11って何?
0188デフォルトの名無しさんNGNG
>>187
http://www.nevrona.com/Indy/
0189185NGNG
>>186
むぅ。
もう一回ちゃんと確認してみる。
thanks.
0190185NGNG
やっぱりだめでした。

1.BCB6をIndy8なしでインストール
2.Indy9.0.11をダウンロードしてきてFullC6.batでmake
3.コンポーネント→パッケージのインストールでインストール
4.新規プロジェクト作成→とりあえずすべて保存
5.Form1にTIdHTTPコンポとメモ、ボタンを一個ずつおく
6.Button1のOnClickに>>186のコードをかく

という感じですが…。
ライブラリパス見てもIndyのパス追加されてるし、
さっぱりわからないよ。
0191 NGNG
>>190
パスはとおっててもリンクされてないだけでしょ。
LIBファイルをプロジェクトにドロップして追加してみ。
0192186NGNG
>>191
>>185の症状だとそんな必要があるんか
いやー、うちはそんなことしてへんけどな

いやまて、うちのはBCB6 Pro.
>>185氏のは?
0193185NGNG
>>191
Indyの場合、どのファイルになるんでしょうか…。
関連するようなファイル(IdHTTP.hpp,IdHTTP.obj,IdHTTP.dcu,dclindy60.bpl)を
プロジェクトマネージャに追加してみたんですが同じリンカエラーがでます

>>192
同じく、BCB6Proです。
謎ですね…。
一回インストールし直した方がいいのでしょうか。
0194186NGNG
>>185
んでは、BCB6本体にアップデートあててあります?
Indyの説明で「まずアップデートしろ、話はそれからだ(意訳)」とあったですよ
んで、その時はアップデート2まで出ていたんで、自分は1と2を順にあててからIndyを入れました。
0195186NGNG
今思い出した
Indyのインストールって、
>FullC6.batでmake
>3.コンポーネント→パッケージのインストールでインストール
だけでは済まなかったような

色々なLibだのbplだのbpiだのを拡張子を頼りに手動でいくつも移動・上書きしたような・・・
0196185NGNG
>>194
あれ?
BCB6のアップデートってでてましたっけ?

Indyのインストール方法については、もうちょっと見直してみます…。
0197186NGNG
>>185
日本語版では出ていませんが英語版ではupd4まで出ています。
登録ユーザーであれば↓
ttp://www.borland.com/products/downloads/registered/cb6_reg_updates_prompt.html
からログインしてアップデートファイルをDLしてきてから、
>>5-6に示された方法でupd2まであてて、
そのあとそのままupd4をあてればOKです
0198デフォルトの名無しさんNGNG
TFrom を継承したクラスをフォームの作成で定義し、
作成したスレッドから new して使用しているのですが、
複数のスレッドが起動して new していると EInvalidOpration 例外が発生して、
「 Canvas に対する描画できません」と出ます。
これは何が原因なのでしょうか。
0199デフォルトの名無しさんNGNG
LoadFromFile で文字コードが EUC-JP なファイルを開くと
日本語部分が文字化けするんですが、何かうまい解決法はないでしょうか。

基本的なことだと思うのですが検索してもさっぱり出てこなくて…。
0200デフォルトの名無しさんNGNG
>>199
メソッドをオーバーロードするしかないんじゃない?
0201デフォルトの名無しさんNGNG
オーバーライドじゃないですか。
そんで文字コード変換コードを。
0202デフォルトの名無しさんNGNG
>>199
コード判別してsjisにコンバートすればいいじゃん
0203デフォルトの名無しさんNGNG
>>197
update4 では変更されるファイルが多いから、update3 までの対策では足りないと思う。
なお、今回は Update4 を日本語環境にインストールするためのパッチは出しません。
0204デフォルトの名無しさんNGNG
>>200-202
読み込む時に文字コードを変えてやればいいんですね。ありがとうございました。

とりあえず
AnsiString str;
edit->Lines->LoadFromFile(FileName);
str = edit->Lines->Text;
edit->Lines->Text = ConvertJCode(str, SJIS_OUT);
などとして逃げてみました(…なんかめちゃくちゃだなぁ)。
0205デフォルトの名無しさんNGNG
優越意識丸出しでいやだねー
0206205NGNG
スマソ、>>205は思い切り誤爆
0207185NGNG
>>197
とりあえずupd4まで入れてみたんですが、
結果同じでした>Getが未解決

Indy9のC6ディレクトリに出来たものを自力で移動させないと
だめってことでしょうかね…。
0208デフォルトの名無しさんNGNG
今日から勉強始めるけど参考書になに買ったらイイ?
0209デフォルトの名無しさんNGNG
山川出版の「世界史」
0210デフォルトの名無しさんNGNG
自分の作ったソフトのTListViewからエクスプローラにD&Dする方法を教えて下さい
0211185NGNG
出来ました!
ちゃんとFAQ嫁ってことで…。
ヒントをくれた>>186氏に感謝。

>>190の3.の後に
・ツール→環境オプション→ライブラリの
 ライブラリパスにパスをC6(の中の*.DCU)の場所を追加
>>190の4.の後に
・プロジェクトのオプションのインクルードパスにC6(の中の*.HPP)の場所を追加

これで無事にmake通りました。
0212デフォルトの名無しさんNGNG
>>211
おめ。
俺も最近Indyで躓いていたので、このやり取りは参考になった。
0213名無しさんNGNG
>>210
過去スレに同じ話があったように思う。
0214デフォルトの名無しさんNGNG
キーフック用のDLLを書いているのですが、
DLL内のグローバル変数を異なるプロセス間で共有するにはどうすればいいのでしょうか?

DEFファイルのSECTIONS文を使えばいいみたいなのですがやり方がさっぱり‥‥∧||∧
0215デフォルトの名無しさんNGNG
>>214
VCなら#pragma data_seg()があるけど、BCBにはないからね。
アセンブラでセグメントを共有するしかないと思う。
0216214NGNG
>>215
大人しく、DLLだけVCでコンパイルします(´・ω・`)
0217デフォルトの名無しさんNGNG

  if ( mBombAy < 0 ) return;
  //操作
  switch( Key ){
    case VK_SPACE:
      mBombX = mPlaneX;
      mBombY = mPlaneY;
      mBombAy = -5;
      break;
    case VK_UP:
      mPlaneAy= -5;
      break;
    case VK_DOWN:
      mPlaneAy= 5;
      break;

      〜

 Bombを動かしてるときはSpaceの入力を受け付けないようにしたいんですが、
 「if ( mBombAy < 0 ) return;」だと全てのキー操作を受け付けなくなっちゃいます。
 Spaceの入力だけ受け付けないようにするにはどうしたらいいでしょうか?
0218デフォルトの名無しさんNGNG
この中でBCB6のEnterpriseを買った人っていてる?
0219 NGNG
>>217
  //操作
  switch( Key ){
    case VK_SPACE:
    if ( mBombAy < 0 ) return;
      mBombX = mPlaneX;

これじゃだめなのか?
あと、BCB使っててもこれはこのスレ範疇じゃないし
Bombという名前からしてゲームだと思うので
ゲーム板で聞いたほうがいいんじゃないかね?
0220デフォルトの名無しさんNGNG
変数に入力した整数を
TMemoに出力するにはどうしたらいいんですか?
0221デフォルトの名無しさんNGNG
>>220
Memo1->Text = IntToStr(number);
0222デフォルトの名無しさんNGNG
>>214
メモリマップドファイルを使いましょう。
0223デフォルトの名無しさんNGNG
>>219
できました どうもです
0224デフォルトの名無しさんNGNG
THotkey::Hotkeyの戻り値から装飾キーの状態を取りたいのですが、
LOBYTE(Hotkey)は仮想キーコードがきちんと格納されているのですが、
装飾キーがHIBYTE(Hotkey)&HOTKEYF_ALT等で取れず、
altの場合はHIBYTE(Hotkey)&0x80にしないと取れないのですが
SDKのHKM_GETHOTKEYとVCLのTHotkeyとでは仕様が異なるのでしょうか?
0225デフォルトの名無しさんNGNG
違うみたいなんで、Modifiers使わないでHotKeyから取りたいなら、
ShotCutToKeyを使うか、HotKey & scAlt みたいにするんだと思う。
0226デフォルトの名無しさんNGNG
threadを作って、そのthreadでCreateProcessを呼んでも成功しないようなのですが、
main threadで実行しなければいけないなど、何か制限があるのでしょうか?
0227226NGNG
Win98では駄目だったんですけど2000では何故かいけました…(?)
0228デフォルトの名無しさんNGNG
TTreeViewのイメージリストにアイコンを追加しようとしたのですが、
実行時にエラーが出て実行できません。
TIcon* icon = new TIcon();
icon->LoadFromFile("icon.ico");
TreeView1->Images->AddIcon(icon);
これでは駄目なのでしょうか?分かる方いましたら教えてください。
0229名無し~3.EXENGNG
質問です。
VCL使った普通のGUIアプリ作っているんですが、
これの動作の優先度(priority)を自分自身で変更するにはどうすればよいでしょうか?

#ググってみたんですが、それらしいものが見つからなくて・・・。
0230デフォルトの名無しさんNGNG
TTreeView->Imagesは外部イメージリストとの接続用だから他でインスタンス作ってTreeView1->Images = とやるかフォームにTImageListを貼り付けてオブジェクトインスペクタで設定するか。
0231デフォルトの名無しさんNGNG
>>229
SetPriorityClass
0232名無し~3.EXENGNG
>>231
ありがとうございました。

HANDLE hMyProcess;
hMyProcess = GetCurrentProcess();
SetPriorityClass(hMyProcess, 0x00000040);

こんな感じでできますた。
#何か定数を入れてもUndefinedっていわれちったので数字直接書いてますが。。。
0233デフォルトの名無しさんNGNG
GetExitCodeProcess関数を使おうとして
BCBのエディタに
GetExitCodeProcessと打つと、
ドライブにディスクがありません。ディスクをドライブ \Device\Harddisk1\DR1に挿入してください。
というダイアログが出て、何もできなくなるんですが、どうしたら良いのでしょうか?
この症状はうちだけなんでしょうか…?
0234233NGNG
OSはWin2000です。
再インストールした方が良いんですかねぇ…?
0235デフォルトの名無しさんNGNG
へー。 IDEのバグ?
コードエクスプローラー関連だと思うけど。
0236デフォルトの名無しさんNGNG
環境はWIN2000,C++Builder5なんですが、
データベースから、DBGridにテーブルを表示させ、クリックで選択した部分の情報を取得するには、
どのように記述すればいいでしょうか?教えてください。
それを元に、その情報を含むデータを別のDBGridに表示させたいです。
0237デフォルトの名無しさんNGNG
サンプルありませんか?
0238デフォルトの名無しさんNGNG
TPrinter を使って、印刷を行う場合、
PDFへの印刷は、プリンタ名にAcrobat Distillerを指定すればよいと思うのですが、
任意の場所(C:\PDF)に任意の名前(TestPDF.pdf)でPDFファイルを出力するには
どのように設定してやればよいのでしょうか?



0239デフォルトの名無しさんNGNG
すみませんが、教えてください。
オプションで指定できる、下記をプログラムから参照するにはどうすれば良いのでしょうか。
会社名/説明/ファイルバージョン/内部名/著作権/商標/正式ファイル名/製品名/製品バージョン/コメント
Versionは5.0です。
0240デフォルトの名無しさんNGNG
>>233
おれんところでは再現せず。

Ctrl-Space でコード補完をかけているか、または GetExitCodeProcess の最後で ( を打ったときに
問題が起きるのであれば、とんでもないディレクトリのファイルを見に行っているんだと思う。
リムーバル HD とか使っていなかったかな?
0241デフォルトの名無しさんNGNG
BCB覚えるのに何かいい本無いですかね。
ぐぐるのにやたら時間かけるのも疲れちゃって…
0242デフォルトの名無しさんNGNG
>>241
あなたが何を覚えてるかによります。
0243デフォルトの名無しさんNGNG
>>241
一冊でやろうとするから難しいのでしょう。
C++の本と Delphi本とに別けて探したら?
というか、まずDelphiに慣れてしまう方が楽なのでは?
0244国語が足りない奴NGNG
Borland C++でリソースコンパイラが、
windows.hのヘッダファイルを展開してくれません。
「Cannot open file: windows.h」というエラーが出ます。
どうすればいいのですか?
0245デフォルトの名無しさんNGNG
>>244
./bin/bcc32.cfgを見直す
0246国語が足りない奴NGNG
bcc32.exeでコンパイルする時は、ふつうに展開するんですけど。
bcc32.cfgやilink32.cfgは SETBCC というフリーソフトにまかせました。
bcc32.cfgは
-I"D:\borland\bcc55\include"
-L"D:\borland\bcc55\lib;D:\borland\bcc55\lib\PSDK"
こうなっているんですが両方のパスは合っています。
0247デフォルトの名無しさんNGNG
>>246
http://pc2.2ch.net/test/read.cgi/tech/1030493157/l50
逝け
0248デフォルトの名無しさんNGNG
DXスレで訊くべきかもしれませんが、
D3DX(エクステンションライブラリ)を、BCB5から使う
方法はありませんか?

COFF2OMF.EXE はインポートライブラリ専用だと知ってとってもガクーリだ。
0249デフォルトの名無しさんNGNG
PDFファイルってプリンタに出力するように作成できるの!?
それって、めっちゃ楽じゃない?
0250デフォルトの名無しさんNGNG
>>239
GetFileVersionInfo
0251デフォルトの名無しさんNGNG
C++Builderって、「実行時パッケージを使って構築」をOFFにしても、EXEだけの
単体で動かす事はできないのでしょうか?
EXE起動時に「CC3260MT.DLLが見つかりませんでした。」というメッセージが
表示されて実行できないのですが。
0252デフォルトの名無しさんNGNG
>>251
オプションのリンカタブにある「共有 RTL DLL を使う」のチェックも外すといいんじゃないかな。
FAQね。
0253デフォルトの名無しさんNGNG
ありがとうございました。
動きました。
0254デフォルトの名無しさんNGNG
C++のクラス変数って初期化されますか?
0255デフォルトの名無しさんNGNG
>>254
もちろん。
0256デフォルトの名無しさんNGNG
C++Builder使うなら、ぱすかるの知識も必要ですか?
0257デフォルトの名無しさんNGNG
>>256
あったほうがよい。
0258デフォルトの名無しさんNGNG
>>248
DX8ならここから(なんか登録とかいるかもしれないが)
http://www.geocities.com/foetsch/
■ このスレッドは過去ログ倉庫に格納されています