[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 05/09 22:12 / Filesize : 78 KB / Number-of Response : 392
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

[Tips]Borland C++Builder ちょいテク No.01



1 名前:1 mailto:sage [2006/08/03(木) 13:43:29 ]
今まで知らないでゴリゴリしこしこやっていた処理が実は簡単に出来たなんてことがよくあります。
そんなちょっとしたテクニックやTips(秘訣)を紹介するスレです。
プログラミングのQ&Aは
C++Builder相談室 Part16
pc8.2ch.net/test/read.cgi/tech/1138766165/
くだすれC++Builder(超初心者用)その2
pc8.2ch.net/test/read.cgi/tech/1144308804/
関連スレ
Borland Developer Studio 2006 No.07
pc8.2ch.net/test/read.cgi/tech/1154069526/
【Delphi】 Indyコンポーネント 【C++Builder】
pc8.2ch.net/test/read.cgi/tech/1093654251/


196 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 10:25:48 ]
ImageのPictureにBitmapを作成して描画してるわけ?

もしかしてスレッド作って描画していない?
片方のスレッドで描画して、メインスレッドで画面に表示なんてやってると良く落ちるよ。


スレッドではTBitmapに描画しておいて、Synchronizeか、メインに対してメッセージを投げて
画面表示の部分だけは同期させるとかさ

197 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 10:56:45 ]
VCLがスレッドセーフなら使いやすいのにな

198 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:06:47 ]
無茶言うなよ
大昔に出来た基礎に増築しまくっていじるにいじれなくなってるのがVCLなんだから
酷いプロジェクトの見本だな

199 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:11:36 ]
逆に言うと、クラスライブラリでスレッドセーフな物ってあったっけ?

なわけねーだろ、オブジェクトにアクセスするときにはミューテックスとかセマフォとか取得するだろーが。

200 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:37:27 ]
>>198
妄想としてOOPでもスレッド同士でメソッド呼び合えるようなものを考えてるんだろうけど、まあ夢は夢。

VCLのように委譲(イベント)を使いまくる場合、
基本的にダブルポインタが必要なわけ。 メソッドポインタって奴ね。
つまりオブジェクトと、関数アドレスの2つが必要になるわけね。

ポインタ1個だけなら同期とかは必要ないけど、2つになると、これはどうしようもない。

スレッドセーフにする為に、イベントに代入するような場面全部に同期対策入れろって思う?
思わないでしょ?

メソッドポインタ一つでさえコレなんだから、スレッド同士でメソッド呼び出しってのは基本的に無理
関数型言語なら、ある程度は可能かもしれないけどね


201 名前:デフォルトの名無しさん [2008/03/06(木) 00:23:00 ]
TStringList *hogehoge = new TStringList();
...
delete hogehoge;

ってコードをよくみるが、
TStringList hogehoge;
でdeleteなしってダメなんか?

202 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 00:52:13 ]
VCLなオブジェクトってスタックにおけるんだっけ?

203 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 01:44:11 ]
c++ builder 2007のkeygenerator持ってる人いる?

204 名前:デフォルトの名無しさん [2008/03/06(木) 01:52:16 ]
>>202
スタックにおけないのか?kwsk



205 名前:デフォルトの名無しさん [2008/03/06(木) 09:52:23 ]
>>201
ヘルプに書いてある


206 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:01:51 ]
>TStringList
>String

これって便利なんだけど、クロス環境で開発してると害悪になる。

下はstringの代用があるけど、上は自作する必要があるorz

207 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:29:41 ]
文字列リストくらい自作すればいいじゃん
別にTStringListそのものである必要なんて殆どないんだろうし
1時間もあれば書けるだろ

208 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:47:45 ]
ヒント: TStringListをバリバリ利用したクラスの移植

209 名前:デフォルトの名無しさん [2008/03/06(木) 10:52:08 ]
TStringListを自前で書いたけど
1時間では絶対に無理
俺は結局1日半くらいかかった。


210 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:56:42 ]
STLとboot使えばよゆー

211 名前:デフォルトの名無しさん [2008/03/06(木) 13:01:34 ]
TStringListって何か特殊な機能あったっけ?

212 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:09:48 ]
特殊な機能は無いけど、

Values、Names
とか
CommaText入出力
とか、
LoadFromStream/File
とかあるから、
代替品を作るときにイパーイ機能を実装しないといけないし、
posとfindとイマイチ似てないところや、
無意識にthrow Exceptionすれば良かったのをクロスでどうするとか、
考えるの大変、差し替え後テスト大変。

213 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:11:49 ]
.CommaText とか便利機能もあるしな

まあ IStrings のCOMインターフェース連携機能は諦めるとして

214 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:13:03 ]
だから、そんなのSTLとboostで代替できるじゃん?
それら使い方知らないってのは勘弁してくれw



215 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:15:29 ]
で、それらを全て持ってるSTLとboostの代替ってどれ?

バラバラに持ってても意味無いんだよ。

216 名前:デフォルトの名無しさん [2008/03/06(木) 13:15:46 ]
そか、VCLしか知らない人が困るというだけだね

217 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:18:17 ]
>>215
なんでバラバラに持っていては意味ないのかわからない
余程の無能じゃなければラッパー部のテストなんてすぐ可能だし、時間がかかる理由がない
逆に教えてくれw

218 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:21:35 ]
そりゃCommaTextくらい実装出来るけど STL や boostでどうやるわけ?
boostのSpiritでやるのか? なんか牛刀持ち出してるように思うが1時間で書けるの?


IStringsはATLだが これも STLの一種だと言い張るわけか

219 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:22:53 ]
ってかまともにテストするなら、テストコード書いてテストするだけで1時間上かかるだろ。


220 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:29:02 ]
>>218
CommaTextなんてtokenizer使えばすぐ

つーか、クロス開発するときにTStringListの置き換えに困るという話なんだから
>>206が言っているようにStringの代替にstd::stringを使えるレベルでいいなら余裕でしょ
IStringsAdapterが、とか持ち出すのは滑稽w

全体的なテストはまた別の話だし、TStringList関係なく必要だから

221 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:39:36 ]
>なんでバラバラに持っていては意味ないのかわからない

クラスのメンバ変数となってたりするわけだから。

222 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:50:19 ]
それだってescaped_list_separatorからエスケープ殺すか、TokenizerFuncから自作するか

223 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:52:22 ]
posが1ベースでfindが0ベースだったり。

TStringListの仕様はガチガチに決まってるところを、
類似クラス作成するときどこまで同じにするかで悩んだり。

224 名前:デフォルトの名無しさん [2008/03/06(木) 13:54:52 ]
そもそも、どんなプラットフォームで開発するにしてもTStringListみたいなデータ構造は必要なんだから
クロス開発するような人なら手持ちにあるはずなんだけどな・・・



225 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:57:16 ]
>手持ちにあるはずなんだけどな・・・

誰でも一番初めは作らないといけないだろ。
反論になってない。

226 名前:デフォルトの名無しさん [2008/03/06(木) 13:58:13 ]
結局、自分のよく知らない開発環境で作ろうとしてるから大変なだけ
初心者がBCB難しいって言ってるのと同じ

227 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:08:30 ]
最近はboost::algorithm::splitなんてものもあるね。

228 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:04:25 ]
VCLべったりってのもよろしくないね。

229 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 08:14:02 ]
MSべったりが一番です

230 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:16:07 ]
我が娘はお父さんべったりです。

231 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 15:40:38 ]
うちは父が妹にべったりです

232 名前:デフォルトの名無しさん [2008/06/24(火) 10:59:31 ]
bcb -b hogehoge.bpr
でビルド自動化

233 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 20:56:47 ]
TIBQueryを使ってるアプリでEOutOfMemoryが出る場合、出にくくするテクはありますか?
ざっと見メモリリークもなさそうですし、CodeGurardでも警告ないんですが。

234 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 22:39:01 ]
双方向カーソルが有効になってない?前にこれではまったことがある。



235 名前:233 mailto:sage [2008/07/07(月) 10:01:24 ]
サンクス>>234

UniDirectionalで使用メモリ量が変わるのですね。
影響ありませんでした。 → 従って、TIBQueryのメモリリークじゃないってことです。

良く考えたら、TImage等を使って巨大なビットマップを作成やコピーしているアプリだと気付きました。
TBitmap系のメモリリークを防ぐテクニックがあれば教えてほしいです。

236 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 21:59:53 ]
C++BuilderってFastMM使えるのかな?リークがないのにOutOfMemoryってことはメモリ領域の
断片化が原因かも。

237 名前:233 mailto:sage [2008/07/08(火) 08:55:17 ]
>>236
あ、断片化でOutOfMemoryが出ることがあるんですか。
勉強になりました。

BCB6なのでFasmMMは標準で入っていません。
数年以内には最新版に逝行するつもりです。

238 名前:233 mailto:sage [2008/07/08(火) 09:49:00 ]
他にも、std::vector使いまくってるから、確かに断片化してるかも。
一応調査はこれで終わろうと思います。

が、この際周辺情報も入手しておきたかったり:
・断片化状態調査ツールなんかないですよね?
・断片化メモリを解放するメソッドはやっぱり無いですよね。
・FastMMにすると断片化を防げるわけですか。

239 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 16:19:35 ]
断片化と言えば一部のMS-IMEが中途半端なアドレスに陣取ってて、1GB以上の物理メモリ積んだ環境でペイントソフトが起動しないってことがあったなあ‥‥

240 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 18:07:42 ]
ページングでメモリ管理やってるんだからメモリ容量(仮想メモリを含む)
ぎりきりのメモリ確保をすれば連続したメモリ領域に確保され直される
と思うが

241 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 21:22:26 ]
>238
FastMMでメモリアロケートの情報を取得できたような気もする。あとメモリ確保のストラテジが標準のものと
異なり、いまどきのメモリがそこそこある状況に最適化されていたはずなので断片化がおきにくいとは思う。
いずれにせよC++Builder 6でも使えるはずなのでまずは試してみてはいかがか?

242 名前:233 mailto:sage [2008/07/10(木) 10:32:26 ]
>>239
メモメモ、すごい勉強になったけど、、、

そんなんあり?_? orz

>>240
そう思うんですけど、現象からはそれを破壊している何かが起きているような。。。

>>241
言われる通りです。
先延ばししても同じ問題が発生したら結局原因追究&対処しなきゃならないんですよね。

243 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 11:21:11 ]
>>242
なんというか、MS-IME はこういう状況らしい。
ttp://magredirect.itmedia.co.jp/r/5Gf/1B/43/1/pcuser/articles/0805/22/news055.html


244 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 11:53:15 ]
日本語のMS-IMEを中国人に開発させるなよ・・・



245 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 00:16:20 ]
毛唐は、日本語と支那語は似たようなものという認識しかねえだろ。


246 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 11:59:20 ]
その前は韓国で作ってたし、レッドモンドの連中の認識はその程度かも。
「うちのほうが頭がいい連中が多いしIMEはまとめて作りますよ」とかいう言葉に乗せられちゃたんだろな。

247 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 11:28:41 ]
コンピュータかコンピューターかなんて話よりそっちをどうにかしろってことだよな

248 名前:デフォルトの名無しさん [2008/08/09(土) 23:26:48 ]
さっき知って感動したこと。
試しに、プロジェクトにDelphiのソースを突っ込んでみたら
.hppファイルが自動生成されて、ビルドがちゃんと通った。
Delphiの変数宣言って、C++のポインタ宣言と同じで実体は生成されないんだね。
C++ならnewするのを、DelphiはCreateするって違いなんだね。
だから、VCLにはCreateメンバ関数が無いんだね。


249 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 01:24:36 ]
>>248
単純なDelphiプロジェクトなら、プロジェクトマネージャに構成ユニット放り込めばビルド通るぞ。

250 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 15:45:38 ]
だれかDMonkeyをBCBで使ってるやついない?

251 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 16:20:45 ]
Monkey D るふぃー?

252 名前:デフォルトの名無しさん [2008/09/09(火) 15:50:55 ]
いま、BCB6で填まっているんですがどなたかお知恵を・・・

BCB6でサービスプログラムを作ったのですが、
有る処理で
Application->ProcessMessages();
と同様の処理をしないといけなくなったのですが、
Application->ProcessMessages();
を記述すると TServiceApplication のメンバーで無いと怒られてしまいます。

なにか他に ProcessMessages と同様の操作する方法ないでしょうか?。

253 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:55:51 ]
ヒント: win32api アイドルループ

254 名前:253 mailto:sage [2008/09/09(火) 15:58:14 ]
てか、検索書けると、
>C:\Program Files\Borland\CBuilder6\Source\vcl\forms.pas 6704: procedure TApplication.ProcessMessages;
まんまソース見えるじゃん。



255 名前:デフォルトの名無しさん [2008/09/09(火) 16:12:04 ]
ソースみれてもエラー出るつってんだよクズしねよ

256 名前:252 mailto:sage [2008/09/09(火) 16:14:52 ]
誰でもいいからはよ答えんかいヴォケが
使えん奴ばっかりやのホンマに

257 名前:デフォルトの名無しさん [2008/09/09(火) 16:27:58 ]
>>255-256は僕じゃありません><
でも僕も同じ事を言いたいです><

早く教えてくださいこの役立たず共よ><

258 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:33:29 ]
この糞共が
さっさと答えろっつーてんだろが

259 名前:デフォルトの名無しさん [2008/09/09(火) 16:35:08 ]
ほんとお前らって役にたたねーよな

260 名前:デフォルトの名無しさん [2008/09/09(火) 17:23:41 ]
>>253-259
ケンカをやめて、二人を止めて〜わたしの為に争わないで〜もう、これ以上〜

って、すみません。
>>253,254 様の書き込みでソースパクって来たのですが、
Assigned() が判らない・・・検索に掛からない…
う〜ん泣き

261 名前:253 mailto:sage [2008/09/09(火) 18:35:55 ]
>Assigned()

これは、関数ポインタが設定(=アサイン)されているか?
ということを確認する関数。

どういうことかっていうと、OnClickみたいなイベントハンドラって関数ポインタ型になってるじゃん?

で、IDEでイベントハンドラ設定すると、

OnClick := ButtonClick;

みたいなコードで関数ポインタが設定されるわけ。

でコンポーネント側は、
>if (Assigned(OnClick))
> OnClick(self, , ,)
みたいにイベントハンドラが設定されてたら関数ポインタを実行(=関数を実行)するわけ。

262 名前:253 mailto:sage [2008/09/09(火) 18:37:49 ]
ま、Assignedコールもできるでしょうし、意味的には、

>if (OnClick != NULL) {
> OnClick(self, , , );
>}

と等価です。

また、OnClickみたいな関数ポインタを使わず、
関数コール直接書いてもおk。

263 名前:253 mailto:sage [2008/09/09(火) 18:42:52 ]
>で、IDEでイベントハンドラ設定すると、
>Button1.OnClick := Button1Click;
>みたいなコードで関数ポインタが設定されるわけ。

の方が正確かな。

ま、上記のような、コンポーネントがイベントハンドラを実行する仕組みは理解した方が良いが、
どーしても理解できない場合は、Win23APIべた書きして下さい:



>ttp://www.m--takahashi.com/bbs/pastlog/03000/02950.html
// アイドリング処理 グローバル関数


264 名前:デフォルトの名無しさん [2008/09/09(火) 21:39:44 ]
>>261-263
すっげー。思わずコピペ保存しちまった。

>>252の者です。
ありがとう御座います、なんとか回避できました。
ていうか、元バグが原因で発生していたので、
ProcessMessages の様な事しなくて済みました。

今、社内では、誰だよこのアプリ作ったのは!!って騒ぎになってます。



265 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 20:10:21 ]
だれなん?

266 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 08:49:35 ]
作った本人何て言ってる?

267 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:37:43 ]
ドキュメントどころかソースに名前がないのは酷いな

268 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 18:37:03 ]
1ヵ月も前の話題にレス。

デバッグしてて VCL の中に入っていくといきなり Pascal になるからびびるよな。
しょーがないので、読める程度に文法知っておこうと文法書買って、せっかくだから
ちょっと書いてみるかで付属の Delphi(BCB 5 Pro には Delphi 4 が付属してた)使ってみたら
そのまま Delphi にハマってしまった。

269 名前:デフォルトの名無しさん [2008/10/21(火) 02:28:29 ]
C++Builderなら
プロジェクトにC++とDelphiを混在させることができるから便利。
Delphiで書きたいとこは、Delphiのファイルにする。
自動的にPascalファイルから、hppファイルを作成してくれる。
Delphiのサンプルソースはあるけど、C++での書き方がわからないという場合
無理してC++に書き換える必要はなく
そのままDelphiのソースが使えるのが、C++Builder


270 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 12:45:08 ]
あらら、C++Builder使ってて、標準ライブラリのPascalコードに迷い込んだ私が通りますよ。

ところで、その標準ライブラリのソースを弄りたくなったんですが、
どうやってライブラリに反映させたらよいのでしょう?
ご存知の方、いらっしゃいませんか?

具体的には、...\source\Win32\vcl\Forms.pas ですけどね。


271 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 22:45:54 ]
パッケージ作り直すか、自分のプロジェクトに直接放り込む。

272 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 09:32:45 ]
>>271
やっぱそうなりますか……
ありがとう。やってみます。

273 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 18:40:45 ]
Delphi の方法ですが、BCB にも dcc32 はあるみたいだし、使えないかな。
かの中村氏の ML への投稿です。

ttp://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=054725

274 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 07:46:44 ]
こやつめw



275 名前:デフォルトの名無しさん [2009/04/23(木) 08:38:39 ]
ほしゅ


276 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 10:39:46 ]
ttp://journal.mycom.co.jp/news/2009/04/27/033/index.html

C++ Builder対応はどうなるんだろう。。。
ちょっと不安。

土と根とは丸で使う気は無いんだが、このままじゃVC++バージョンうpも必要になってきそう。。。

277 名前:デフォルトの名無しさん [2009/06/26(金) 00:37:00 ]



278 名前:デフォルトの名無しさん [2009/07/15(水) 12:15:05 ]
C++ Builer6/FastMM
ですが、
メモリ破壊を調べる方法ってありますか?

手順と化知りたいです。

279 名前:デフォルトの名無しさん [2009/07/15(水) 14:50:34 ]
CodeGuardをオンにする


280 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 21:37:13 ]
heapwalkとか

281 名前:222.248.109.70 mailto:age [2009/08/17(月) 17:45:25 ]
自動焼人 ★ = 自動保守 ◆KAWORUKOFI = 自動保守#K9K?_D[L

名言集 その3
『いつもサボってばかりのキャップがウゼえ』

yutori7.2ch.net/test/read.cgi/news4vip/1249830540/ ID:PVAf+dux0 = 自動焼人 ★
> 71 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:58:57.28 ID:PVAf+dux0
> >>69
> 大変って言うか
> 毎日、報告されたのを見て、判断して、処理して、完了報告して、以下ループ。
> ちょっとでもミスすると、普段は作業もしてないキャップさんたちがさんざん文句言ってきて
> その言いわけを考えないと、キャップはく奪されたりアカウント凍結されたりするから
>
> 登録されてから一年以上経って、やっといいたいこと言えるようになってきたよ。



----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
qb5.2ch.net/test/read.cgi/sec2chd/1250169591/
にて自動焼人 ★までご連絡ください

282 名前:デフォルトの名無しさん [2009/10/09(金) 14:17:25 ]
相談室スレが落ちたのでここで質問させてください

TChartShapeでchasVertLineにしてマークを表示させてるのですが
マークが上と下(Y1とY0)に2つ表示されてしまいます
これを上1つ(Y1)だけ表示されるのにはどうしたらいいですか?

283 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:14:12 ]
スレ立てろって。>282専用のような気もするが。

他のプロパティはどうなってんのよ。というか再現する最低限のプロジェクトを作って
その上でわからんことを聞いて欲しいんだが。プロパティとかも[ALT]+{F12]でコード表示にして
object Series2: TChartShape
Marks.Callout.Brush.Color = clBlack
Marks.Style = smsPercent
Marks.Symbol.Gradient.Visible = True
Marks.Symbol.Visible = True
..
こんな風に晒してくれると試しやすいんで。.

284 名前:284 mailto:sage [2009/10/12(月) 00:39:59 ]
Turbo C++ 2006 Explorerで、インラインアセンブラを用いて下記のようなコードを書きました。
設定をDebug Buildでビルド・実行すると期待通りに動くのですが、Release Buildにすると
「$7C812AFB に最初の偶発例外があります。例外クラス EAccessViolation (メッセージ 'アクセス違反')」
となってしまいます。Release Build設定でも動くようにするには、どうしたらいいか教えて下さい。
よろしくお願いします。
#include <stdio.h>
int main(void)
{ int i;
  float src[4], dst[4];
  float *psrc = src, *pdst = dst;

  for (i = 0; i < 4; ++i) {
    src[i] = i*3.14;
  }
  asm {
    mov esi, psrc;
    mov edi, pdst;
    movups xmm0, [esi];
    movups xmm1, xmm0;
    movups [edi], xmm1;
  }
  printf("dst: %g, %g, %g, %g\n", dst[0], dst[1], dst[2], dst[3]);
  getchar();
  return 0;
}



285 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 05:20:35 ]
>>284
デバッグとリリースで結果が変わるんなら、最適化辺りじゃないの?

アセンブラコードが入ってるルーチン(その例だとmain())の前後、

#pragma option push -Od // 最適化無効



#pragma option pop

で括ってみ
(TC2006での最適化無効のpragma指定がこれであっているかは知らないから、
後は調べてくれ)

286 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 09:26:47 ]
ヘッダファイルに関数の実装まで記述して、
他のcppファイルからincludeして関数呼び出すとインライン扱いになるよね?

んでこの場合、該当ヘッダファイルの関数を修正して実行しても反映されない。
呼出側のファイルをビルドしても反映されない…。

プロジェクトのクリーンアップをしてからだと問題なく反映されるんだけど
ファイル数が数百単位なんで休憩しまくりで困ってるんだ…。

コンパイルオプションに何かあるかと思ったが俺様の高性能な節穴では見付けられなかった…

287 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 12:50:31 ]
プリコンパイルヘッダ?

288 名前:284 mailto:sage [2009/10/12(月) 16:16:31 ]
>>285 教えて頂いた通りにしたら、動きました。ありがとうございます。

289 名前:286 mailto:sage [2009/10/12(月) 17:59:30 ]
>>287
アドバイスありがとう、俺もその辺が気になってイジッてみたが変化なかった。

で、スマナイ誤報があった。
「呼び出し側のファイルをビルドしても反映されない」というのはウソ。
書き換えたヘッダファイルを利用してるファイルさえ個別ビルドすれば問題なく反映された。
ただ呼出元が多すぎて手作業で個別ビルドするよりクリーンアップした方が早かった…orz

「更新されたファイルを #include してるファイルだけリビルドする」
って動きを期待してるんだが、設定次第でできるのかな?

290 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:04:09 ]
すいません、くだすれや相談室が無いのでここで相談させてください。
BCB6で、フォーム上にてShiftやAltを押しながらのみで反応するイベントを作成することはできますでしょうか?
よろしくお願いします。

291 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:14:44 ]
>>290
KeyDownやKeyUp、Mouse系イベントなら Shift・Alt・Ctrlが押されているか確認できる。
ShiftやAlt(やCtrl)が押されているときだけ発生するイベントはないと思う。

292 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:03:19 ]
>>291
組み合わせですね、ありがとうございます

293 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 23:45:57 ]
すみません、質問させて下さい。
構造体を16バイトでアライメントしたいのですが、下のように #pragma pack を使っても
実行結果が8 12 0(アドレス{ :00402188, :0040219C, :004021B0 })となって、上手くいきません。
どうすれば構造体を16バイトでアライメントできますでしょうか?よろしくお願いします。
// Turbo C++ を使っています。
#include <stdio.h>

#pragma pack(push, 16)
struct MyStruct{
 float a[5];
 float b[5];
 float c[5];
} MySt;
#pragma pack(pop)

int main(int argc, char* argv[])
{
 printf("%lu\t%lu\t%lu\n",(unsigned long)MySt.a % 16
                ,(unsigned long)MySt.b % 16
                ,(unsigned long)MySt.c % 16);
 getchar();
 return 0;
}

294 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 08:36:12 ]
それは構造体のアラインじゃなくて、構造体の メ ン バ のアラインだよね。



295 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 12:34:23 ]
>>294
すみません、書き方が悪いですが、&MyStではなく、
メンバ変数のa, b, cを16バイトでアラインしたいということです。
よろしくお願いします。

296 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 12:52:57 ]
a,b,cの間にダミーのdoubleでも入れてパディングさせるしかないんじゃね?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<78KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef