■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

★初心者にVisual C++を教えるスレ★ Part17
501 名前:デフォルトの名無しさん :2005/03/25(金) 01:06:55
>>500
うん

502 名前:デフォルトの名無しさん :2005/03/25(金) 12:26:03
なんでー?

503 名前:デフォルトの名無しさん :2005/03/25(金) 12:34:07
EXE側とDLL側のnew/deleteの実装が違うから

504 名前:デフォルトの名無しさん :2005/03/25(金) 21:13:42
抽象的な質問で申し訳ないけど、VC++.net2003で
皆さんは.net frameworkを使って作成してるのですか?
それとも6.0の頃と同様にMFCを使って作成?

また、配布方法はexeのみで配布できるのでしょうか。
それとも.net frameworkも一緒に配布する事に?
またMFCを使った場合は?

「?」ばっかりですまん。。

505 名前:デフォルトの名無しさん :2005/03/25(金) 21:35:39
Borland C++Builder6.0

\5000

http://page7.auctions.yahoo.co.jp/jp/auction/g32387589

506 名前:デフォルトの名無しさん :2005/03/25(金) 23:05:52
>>504
俺は.NETもMFCも使わない。
最近は、VC++も使わな(略。

あと、MFCは性的リンクでexe単体配布可。


507 名前:デフォルトの名無しさん :2005/03/25(金) 23:07:08
未だにDoc/Viewが理解できずにカッコイイViewがつくれない俺は・・・

508 名前:デフォルトの名無しさん :2005/03/26(土) 00:20:56
Doc/Viewなんかに頼るのは弱虫のすることだ。
キニスルナ

509 名前:デフォルトの名無しさん :2005/03/26(土) 03:07:34
でも、使えればそれなりかもしれんとは思う。
ただ、使えたからと言ってカッコイイViewができるとは限らない。

510 名前:デフォルトの名無しさん :2005/03/26(土) 03:09:26
>>503
実装が違うって具体的には?
new deleteの手法が違うってこと?
自分でも言ってる意味がわからないです...orz

511 名前:がっでむ :2005/03/26(土) 09:07:16
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
  _tprintf(_T("日本語\n"));
  return 0;
}

UNICODEにすると、ちゃんと動かない!

最初に
_tsetlocale(LC_ALL, _T(""));
したら動くようになったけど、そんな約束、どこに書かれてるよ・・・orz

MBCSなら何もしなくても「日本語」が出るのにさ・・・。

512 名前:デフォルトの名無しさん :2005/03/26(土) 09:33:40
>>510
例えばDLLはコンパイラAで作り,EXEをコンパイラBで作ったとする。
new/deleteの実装がコンパイラAは内部でHeapAlloc/HeapFreeを使っていて,
コンパイラBはGlobalAlloc/GlobalFreeを使っているという実装だったら……,と考えてみたらいい。

あるいは共に同一のコンパイラを使っていたとしてもそれぞれのスタートアップルーチンで
独自にCreateHeapしてそれを使っていたとしたらやっぱりアウト。

513 名前:デフォルトの名無しさん :2005/03/26(土) 09:36:36
MSDNを「UNICODE」で検索してるとそんな記述が見つかる

514 名前:デフォルトの名無しさん :2005/03/26(土) 10:36:18
>>511
エントリポイント変更した?

515 名前:デフォルトの名無しさん :2005/03/26(土) 10:50:29
>>510
new/deleteだけじゃないぞ。
C++のクラスも、またいで使うべきではない。


516 名前:デフォルトの名無しさん :2005/03/26(土) 11:12:44
std::string・MFCをスタティックリンクしたCStringをDLLからEXEに渡す・その逆とか。
ときどき見かけるよね。

517 名前:511 :2005/03/26(土) 11:23:21
>>513
MSDNライブラリのprintfの解説のプログラム例で、
setlocale(LC_ALL, "Japanese") ;
が書かれていました。

printfなんて知ってるよ、と高をくくって、よく読まなかったのを反省してます。


>>514
wmainCRTStartupに変更してみましたが、setlocaleは不要になりませんでした。

518 名前:デフォルトの名無しさん :2005/03/26(土) 11:29:09
>>516
漏れは、
DLL内のクラスを継承した、EXE内の派生クラスの仮想関数を、
基本クラスから呼んでいるのを見た時は、ぞっとした。

まぁ、またいではいけないと言われたら、MFCすら使えないわな。
行儀悪くなくても、MFCの実装はDLL内にあるんだからさ。

519 名前:518 :2005/03/26(土) 11:32:56
使っているMFCのバージョンが違うと、DLLをまたぐと危ない、というのもあるね。
MFC4.2と6.0では、バイナリ互換が保たれているので、リリース版なら問題ないらしい。

しかし、デバッグ版はバイナリ互換がないので、大変なことになる。
7.0では、バイナリ互換なくなったそうだから、やっぱり大変なことになるのかな。

520 名前:デフォルトの名無しさん :2005/03/26(土) 16:25:31
えええ〜。
では、DLLから得たヒープ(のポインタ)はどうやってdeleteするのでつか?

521 名前:デフォルトの名無しさん :2005/03/26(土) 16:32:21
DLL側

char* NewHoge( )
{
char* p=new[ 256];
strcpy(p,"Hogehoge");
return p;
}

EXE側
int main()
{
char* P=NewHoge();
printf( "%s", P);//正常に表示
delete P;//実行時エラー
return 0;
}

でPがどんな実装で生成されたヒープのポインタでも
printf()は正常に動作するのに、deleteはダメだなんて
なんかへんなのーーー。


522 名前:デフォルトの名無しさん :2005/03/26(土) 16:34:28
>>520
DLLにdeleteしてもらえばよかろう。

523 名前:デフォルトの名無しさん :2005/03/26(土) 16:34:33
プロトコルではなく決まり覚えろばか者

524 名前:デフォルトの名無しさん :2005/03/26(土) 16:36:14
延髄切りしたい人多い

525 名前:デフォルトの名無しさん :2005/03/26(土) 16:38:18
めんどくさいな。

526 名前:デフォルトの名無しさん :2005/03/26(土) 16:44:51
>>522
頼んだけどやってもらえませんでした。

527 名前:デフォルトの名無しさん :2005/03/26(土) 16:56:57
VCについているサンプルコードを利用して自作のプログラムを書いても良いのでしょうか?
著作権とかそこらへんはどうなっているのでしょう?

528 名前:デフォルトの名無しさん :2005/03/26(土) 16:59:56
>>527
ここでいいよと言われたからって、それを信じてもいいのかな?
あとで訴えられても知らんよ。

529 名前:デフォルトの名無しさん :2005/03/26(土) 17:15:42
まんまパクリならばれるだろうけど
特許取得されてるアルゴリズムとかじゃないかぎり
ほとんどの場合はばれようがない。

530 名前:デフォルトの名無しさん :2005/03/26(土) 17:29:28
>>521
変じゃないぞ。

土地に例えるとだな・・・
printfがやっているのは、指定された番地の土地に何があるか見に行くこと
deleteがやっているのは、指定された番地の土地の所有者の名義を帳簿上で書き換えること

前者は誰が見に行っても同じだが、
後者は、名義を管理している人以外がやったらダメでしょ。

531 名前:デフォルトの名無しさん :2005/03/26(土) 22:23:35
ほげー。リリースビルドだと何も起きないんだよな。
ってことはメモリリークしてるってか。やべーな。
もう遅いや。放っておこう。

532 名前:デフォルトの名無しさん :2005/03/26(土) 23:21:05
VC++.net2003を始めて勉強しようかと思うのですが
MS関係以外で、定番サイトは無いのでしょうか?
ざっと検索してみた所、意外に無かったので・・

533 名前:デフォルトの名無しさん :2005/03/26(土) 23:56:09
使用どころか、再配布まで許可されてるぞ。
ちゃんとRedist.txtに書いてあるぞ。

534 名前:デフォルトの名無しさん :2005/03/27(日) 00:21:01
それは一般まで含まれていないというオチとかない?

535 名前:デフォルトの名無しさん :2005/03/27(日) 00:56:05

現在職場5年目最大の壁にぶちあたっています。
WIN端末よりUNIXのファイル情報取得プログラムをつくっていたのですが
詳しい方法が検索してもでてこなかったのでFFFTPの
公開VCソースを解析し、UNIX上の管理ファイルをYYYY/MM/DD HH:MM
形式にて取得可能なソースコードを作成しました。
そこで、EXE形式だとパラメタ引継ぎ等、何かと不便なため
VCウイザード(非MFC)にてDLL化を行おうとかんがえました。
呼び出し元はVBのクラスモジュールなのですが、一応
EXE時代のソースコードをそのままVC DLLプロジェクトに移行できまして
、そのままプロトタイプまで作成完了しました。
現状ではVBからその関数化されたDLLをコールし、指定したUNIXサーバの
接続を実現し、要求した情報を取得できてます。
ただ、すごい問題点が宿題としてのこっているのですが
もともとEXEだったFFFTPソースコードはWindowをもっており
その画面のINITにより全てのプログラムを有効にしておりました。
しかし、私がつくっているのはDLL、画面を持たないプログラムリソースです」
すごく厨なコーディングなのですが、移植したプロジェクトのメインソースは
もちろんVC++なのでCPPがソースとなります。移植されるソースコードはFFFTP
となりCソースコードです。
ぶちゃけ、DLL化されたdefファイルにEXPORT宣言し、ヘッダとCPPに
メインとなる関数を定義し、それをVBから呼ぶつくりです。
なにをいいたいかというとFFFTPはEXE 私が作ったソースはDLL
アホなコードなのですが、FFFTPのWinMain関数を
DLLのCPPから直接コールしてたのです、当然処理はうごきます。
が、VB処理から呼ばれた、当該DLLは、処理さえ完了してくれるものの
親プログラムのVB画面が閉じられると 容赦なくワトソン君を出してくるのです
なんとかなりません?長文すみません

536 名前:デフォルトの名無しさん :2005/03/27(日) 00:58:41
ひさびさにワロタ

537 名前:デフォルトの名無しさん :2005/03/27(日) 01:02:09
ネタとしか思えんな

538 名前:デフォルトの名無しさん :2005/03/27(日) 01:03:56
読むのもめんどくさい

539 名前:デフォルトの名無しさん :2005/03/27(日) 01:11:50
FTP用のDLLを探してくればいいんじゃないかなぁ

540 名前:デフォルトの名無しさん :2005/03/27(日) 03:38:27
>535
一から作り直す。
FTPの仕様さえ判っていれば1日で作れると思うが

541 名前:デフォルトの名無しさん :2005/03/27(日) 09:11:42
>>535
5年も社会人やってる人間がこんな白痴的うんこ文書書くわけないだろ。ネタ決定。

542 名前:デフォルトの名無しさん :2005/03/27(日) 11:27:26
その前に5年もやってたらそのぐらいのプログラム一日で書いて下さい

543 名前:535 :2005/03/27(日) 12:43:56
おまいら、そんな冷たい事いわないでなんとかなりませんか?

544 名前:デフォルトの名無しさん :2005/03/27(日) 12:49:12
何を期待してるのか知らんが、自分で何とかしなきゃならんだろ。

545 名前:535 :2005/03/27(日) 13:27:08
期待はしておりませんが、解決方法、対策等を有能な方
よりアドバイスいただければ早期解決できるものかと希望をもってます。
実は今の作業完了を目処に今のプロジェクトを抜けたいと考えています。
当方 A型のため、中途半端で会社を去りたくないので何とか
パパっと解決したいと考えます。ご協力よろしくお願いします。

546 名前:535 :2005/03/27(日) 14:27:26
マジレスながらVCに詳しい方の助言を戴きたいのですが
CPPソースに
EXPORT BOOL GetUnixInfo(LPSTR strIP,LPSTR strU,LPSTR strP,LPSTR strFile,LPSTR Getinfo){
WinMain();
}

と現状はDLLなので外部宣言のメイン関数は上記のコードとなります。
WinMain();はEXE時代の親コードとなり、現在呼び方が分からないので
やむなく直接コールしています。
多分このやり方が厨で、ワトソン君を誘発してるとおもいますので
要するにEXE時代のWinMain,InitApp,MakeAllWindow
あたりのメインコードをDLL用にすっきりまとめたいのです。
そのマイナーな方法を助言いただきたく思うのです。


547 名前:デフォルトの名無しさん :2005/03/27(日) 14:38:47
>>535
上司に相談しろ。

548 名前:デフォルトの名無しさん :2005/03/27(日) 16:27:07
質問です。
VC++ SDKで開発をしています。

別のアプリケーションのテキストウィンドウの
キャレットの位置を取得して、
その位置にポップアップメニューを出したいと考えています。

BOOL GetCaretPos(
LPPOINT lpPoint // address of structure to receive coordinates
);

というのがあったのですが、
自分のウィンドウのキャレット位置しか取得できませんでした。

何か良い手法はないでしょうか?


549 名前:デフォルトの名無しさん :2005/03/27(日) 17:32:53
デバッガの使い方とか表示の意味が良くわからないんですが
なんかいいサイトないですか?

550 名前:デフォルトの名無しさん :2005/03/27(日) 19:00:11
>>535
5年も何やってたんですか?(マジレス)

551 名前:535 :2005/03/27(日) 20:08:52
煽りや冷やかしは要らないので
本当に技術ある方よろしくお願いします

552 名前:デフォルトの名無しさん :2005/03/27(日) 20:23:34
5年選手のネタレスに煽り以外何を書けと?

553 名前:デフォルトの名無しさん :2005/03/27(日) 20:24:51
>>551
マジレスすると、>>539-540が出来ないんだったら上司なりに相談するべき。
ここで説明できる量じゃないし、そんな暇な奴が居るとも思えない。
ちょっとした仕事だ。そしてそれは君のやることだ。

554 名前:デフォルトの名無しさん :2005/03/27(日) 20:37:18
処理も動いており 不具合のオオヨソの原因がわかってる内容に対して
改めてつくり直すとか別の手法を検討するなどあまりにも無意味じゃないですか?
イチからジュウ教えてくれと言ってる訳じゃなく
問題点と改善法を見出し
それについて助言を求めているのです。
あなたも素人じゃないなら不必要に
質問の回答とはほど遠いようなアドバイス等するべきじゃないんではないですか?


555 名前:デフォルトの名無しさん :2005/03/27(日) 20:46:34
> 問題点と改善法

・問題点
 あなたは根本的にこの仕事に向いていない

・改善法
 いますぐやめるべき

マジレス。

556 名前:デフォルトの名無しさん :2005/03/27(日) 20:53:28
せんせー>549
はネタじゃないんです、なんかいいサイト無いですか?

557 名前:デフォルトの名無しさん :2005/03/27(日) 20:55:22
もうわかりましたから
とりあえず質問に対する技術的な
回答をおねがいしますよホント。
vcが苦手なんであればすっこんでいてくだい。
よろしくおねがいします

558 名前:デフォルトの名無しさん :2005/03/27(日) 21:08:28
>>557
>>539-540

>>556
http://www.google.com/search?q=%E3%83%87%E3%83%90%E3%83%83%E3%82%AC+%E4%BD%BF%E3%81%84%E6%96%B9&ie=utf-8&oe=utf-8

559 名前:デフォルトの名無しさん :2005/03/27(日) 21:10:57
誰か良いVC++.netサイトを教えてちょ>>532

560 名前:デフォルトの名無しさん :2005/03/27(日) 21:14:31
>>559
何を知りたいんだよ。
IDEの使い方ならマニュアルでも読め

561 名前:デフォルトの名無しさん :2005/03/27(日) 21:19:19
>>559
何が良いかはその人の持っている技術力による。
良いサイトが見つけられないなら、もっと探せ。

562 名前:デフォルトの名無しさん :2005/03/27(日) 21:50:53
>>560-561
了解です。
ネコでも・・みたいなサイトが無いかな、と思って。
定番サイトって無いもんなんですな。

563 名前:561 :2005/03/27(日) 21:57:37
>>562
ネコでもほど親切じゃないが、探せばたくさんある。

564 名前:デフォルトの名無しさん :2005/03/27(日) 22:00:34
>>562
スタートページからいけるサイトが意外と使える。

565 名前:561 :2005/03/27(日) 22:03:19
VC++.NETで聞いているってことは、マネージドC++か?

566 名前:535 :2005/03/27(日) 22:20:58
理解しました。自分で何とか解決しようと思います。
多少イライラしてましたので心無い発言もしてしまいました。
本心では無いのでお許しください。
すいませんでした。
皆さんのおっしゃる通りです。
五年間いろんな壁をのりこえて来たので
今回もなんとか自力でがんばります。
親身に回答いただきありがとうございました。

567 名前:デフォルトの名無しさん :2005/03/27(日) 23:16:29
5年間もの間、度々こんな壁にぶつかってたのか…
南無…

568 名前:デフォルトの名無しさん :2005/03/28(月) 00:37:37
>>564
とんくす子

569 名前:デフォルトの名無しさん :2005/03/28(月) 02:40:16
>>549
マニュアル嫁

>>535
>>554>>557もお前さんか。
作り直したほうが早くて確実だから、作り直しを勧めているひとが大勢いるわけですよ。

しくみもわからずに人様のソースを盗むようなことやってるから、5年経ってもセンスがないのよ。
人様のソースを盗むのも悪くはないが、ちゃんとその中身を読んで理解して、
そのケースに最も適切なソースを盗むようにしようよ。

人様のソースであっても、盗んだ以上、その品質の責任は自分にあるんですよ!!!

570 名前:569 :2005/03/28(月) 02:43:42
というだけではあれなので、もう少しアドバイス。

とりあえずVC++にくっついてくるMFCのWinINetクラスはどうよ。
VC++にマニュアルもサンプルもついてるんだからさ。

571 名前:デフォルトの名無しさん :2005/03/28(月) 04:20:02
VCのコンパイラは自動的にSIMDを利用してくれるのでしょうか?
たしかインテルのコンパイラは自動的に利用してくれたと思うのですが。

572 名前:デフォルトの名無しさん :2005/03/28(月) 08:58:26
> 今回もなんとか自力でがんばります。
 お ね が い だ か ら 辞 め て く だ さ い

その「自力でがんばった」コード誰が保守すると思ってるの?ねえ?あなたが一生責任持って保守してくれるの?ねえ?ねえ?

573 名前:デフォルトの名無しさん :2005/03/28(月) 10:11:49
>>571
VC7.1 (VC7も?) の場合、
コンパイルオプションを設定すれば、勝手に使ってくれるようになったはず。

574 名前:デフォルトの名無しさん :2005/03/28(月) 10:51:13
>>573
その場合、例えばsseの入っていないパソコン上でも実行可能な物を作ってくれるのでしょうか?
それともsseの入っていないパソコンではエラーとなるようなものができてしまうのでしょうか?

575 名前:デフォルトの名無しさん :2005/03/28(月) 10:59:37
WM_SYSCOMMAND をプロシージャの中に入れておくと、
WM_COMMAND メッセージで指定している部分を処理してくれないのですが、
一体どうすればいいでしょうか?

576 名前:デフォルトの名無しさん :2005/03/28(月) 11:01:56
Visual Studio .NET 2003のウィザードでWin32 プロジェクトを作って
すぐF5でデバッグ実行して終了すると変な例外が出てるんですが、こういうものなんでしょうか。

> NullpoProject.exe の 0x77cfe062 で初回の例外が発生しました : 0xC0000005: 場所 0x25ad3f8c を読み込み中にアクセス違反が発生しました。 。
> NullpoProject.exe の 0x77cfe062 で初回の例外が発生しました : 0xC0000005: 場所 0x25ad3f8c を読み込み中にアクセス違反が発生しました。 。
> プログラム '[3248] NullpoProject.exe: ネイティブ' はコード 0 (0x0) で終了しました。

577 名前:デフォルトの名無しさん :2005/03/28(月) 11:32:30
>>575
コードが悪い
case がおかしいとか、break が無いとか。

>>576
コードが悪い
自動生成されたコードだけで出るんであれば、
環境が悪いんじゃない?

578 名前:デフォルトの名無しさん :2005/03/28(月) 12:03:34
思いっきり端折ってこんな感じなんですけど、やっぱり WM_SYSCOMMAND の
コメントアウトをはずすと、タスクマネージャーからしか終了できなくなってしまいます。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/279.cpp

何が悪いのかわかりません・・・orz

579 名前:デフォルトの名無しさん :2005/03/28(月) 12:04:47
>>575
return TRUE;
return FALSE;
return DefaultWindowProc();
この違い分かってる?


580 名前:デフォルトの名無しさん :2005/03/28(月) 12:06:09
case WM_SYSCOMMAND:
return TRUE;


581 名前:デフォルトの名無しさん :2005/03/28(月) 12:06:58
違った
こっちだ
case WM_SYSCOMMAND:
return DefWindowProc( hpwnd, msg, wp, lp ) ;


582 名前:デフォルトの名無しさん :2005/03/28(月) 12:13:14
おぉ・・・ほんとだ、正常に動きました。
うえの3つの違い、全くわかりません。ダイアログボックスとかでは、
TURE とか FALSE になるんだと思ってました。
もしよろしければ、お教え願えませんでしょうか。

583 名前:デフォルトの名無しさん :2005/03/28(月) 12:41:33
直ったついでに聞きたい気持ちは分かるが
オウム返し的な質問は歓迎されない
ドキュメントくらいは読んだ方が良い


584 名前:デフォルトの名無しさん :2005/03/28(月) 12:47:32
すみません。全くその通りですね。ググってたら、出てきました。
一応後々の人たちのために
http://wisdom.sakura.ne.jp/system/winapi/win32/win12.html

お陰で理解できました。ありがとうございます!

585 名前:デフォルトの名無しさん :2005/03/28(月) 12:50:46
>>584
ついでに言っとくと、
WndProc コールバックや、そこから DefWindowProc を呼び出す
っていう発想は、オブジェクト指向の継承とポリモフィズムの実装そのもの

WinAPI が作られた当時は C で頑張っていたんだが、その名残みたいなもの


586 名前:デフォルトの名無しさん :2005/03/28(月) 13:10:02
>>574
残念ながら、CPUによって場合分けするのは、プログラマの仕事。

>>576
0x77cfe062のアドレスにロードされたモジュールは何?
あと、デバッガの設定で例外が出たらブレークするように設定して、コールスタックみてみ。

587 名前:デフォルトの名無しさん :2005/03/28(月) 21:03:51
VCのコンパイラはインラインアセンブラでSSEとか使うとちゃんと
使えるようになるだけで自動的にSSEとかMMXのコードを吐いてくれる
わけではない。要するに、単に対応しているだけだ。
インテルのコンパイラは最適化によっては自動的にそういうコードを
吐いてくれるが、最適化しやすいようにソースコードを書いておかないと
あんまり期待出来ない。
どちらを使うにしろ、結局はインラインアセンブラで頑張るか、
fvec.hとかのライブラリでSSE用のソースコードを書くとかすることに
なるだろう。

588 名前:デフォルトの名無しさん :2005/03/29(火) 01:56:27
>>587
嘘つき〜
VC7以降はfloatやdoubleの計算にSSEやSSE2を使ったコードを吐きますよ。

しかも、インラインアセンブラで書くのは良くない。
intrinsicを使って書けば、コンパイラが最適化までしてくれるぞ。

ただし罠があって、intrinsic使った部分は、関数のインライン展開を設定すると、最適化されなくなる。

589 名前:デフォルトの名無しさん :2005/03/29(火) 02:05:46
>>588
587じゃないけど、関数毎にSSE最適化使うか設定出来るのか?

590 名前:デフォルトの名無しさん :2005/03/29(火) 14:46:18
>>588
知ったかクン、ご苦労

591 名前:デフォルトの名無しさん :2005/03/29(火) 15:19:13
>VC7以降はfloatやdoubleの計算にSSEやSSE2を使ったコードを吐きますよ。

VC++7.0には/archオプションは無いからSSEとかのコードは吐いてくれないよ。
対応しているのはVC++7.1。.NET2003だ。しかし、それとて、どこでSSEを使って
くれるかは完全にコンパイラ任せだからコントロールしにくい。

>intrinsicを使って書けば、コンパイラが最適化までしてくれるぞ。
自慢して言うことかね。intrinsicをもう一度勉強し直した方がいい。

592 名前:さげ :2005/03/29(火) 15:50:47
インラインアセンブラが駄目と言う香具師は
インラインアセンブラの使い方を知らないんだろうな。
初心者スレだから、ま、いいか。


593 名前:デフォルトの名無しさん :2005/03/29(火) 17:18:53
淫乱アセンブラはVCに付属しているのですか?

594 名前:デフォルトの名無しさん :2005/03/29(火) 17:21:21
淫乱は付いてこない。

595 名前:デフォルトの名無しさん :2005/03/29(火) 17:22:43
どのアセンブラがよいですか?

596 名前:デフォルトの名無しさん :2005/03/29(火) 17:29:12
インラインアセンブラで最適化効率悪くなるって
どんな組み方するとなるんだ?

今の所はそんなことないし、よく分からん。

597 名前:デフォルトの名無しさん :2005/03/29(火) 18:09:46
初心者の場合、下手に淫乱アセンブラで書くより、コンパイラに任せた方が、最適化されることが多い。


598 名前:デフォルトの名無しさん :2005/03/30(水) 02:07:49
つい最近VC++を始めた者です。
指定したファイルを読み込み、処理結果をエディットボックスに表示するという、
ダイアログベースの簡単なプログラムを作っています。
ファイルを1行ずつ処理しながら
m_strEdit = m_strEdit + buf;
のようにメンバ変数に処理結果の追加を繰り返し、最後に
UpdateData(FALSE);
としてダイアログを表示しています。
これで一応動作はするのですが、入力ファイルサイズに比例して出力も大きくなるので、
50KBぐらいになると表示するまでに時間が掛かって「あれ?動いてない?」という感じです。
処理速度を上げるにはどうすればよいでしょうか?
アドバイスよろしくお願いします。

599 名前:588 :2005/03/30(水) 02:27:08
>>589
関数ごとに設定をわける意味はないよ。

同じソースファイルをマクロ定義で関数名など切り替えて、
コンパイラオプション変えて2回コンパイルするのよ。

>>590
お前さんはVC6やVC7でSSE2を使ったコードを書いたことあるのか?
漏れはあるぞ。

>>591
7.0はダメなのか・・・知らなかった。
速効で7.1に無償アップデートしちゃったから、試したことなかったよ。

俺のコードが下手なのかもしれないが、
自前でインラインアセンブラで書いたコードよりも、
intrinsicを使ってコンパイラに最適化させたコードのほうが速かったんですよ。

つーか、自前で書いたほうが速い人って、いったいどんなコード書いてるの?
アセンブラで凄いコードを書いてるか、C/C++で劣悪すぎるコードを書いてるのか、どっちなのよ。

>>592
インラインアセンブラで書けば、アセンブラで書いた部分だけは、
人間の手作業でコンパイラより速いコードを書けるかもしれないけど、
その前後のC/C++で書いたコードのコンパイラの最適化を阻害するんですよ。

実際に比較実験をしたからこそ言える話でしてね。

600 名前:588 :2005/03/30(水) 02:36:34
>>596

>>599の終わりに書いたけど・・・

例が悪いけど、
nHoge += 10 ;
_asm{ 何か }
nHoge += 10 ;
のようなコードで、nHoge +=20 にまとめてくれなくなります。

こういう露骨な例だけでなく、かなりの最適化が行われなくなります。
混ぜないで全部アセンブラで書く人には関係ない話ですけどね。


601 名前:デフォルトの名無しさん :2005/03/30(水) 02:46:07
>>599
> 関数ごとに設定をわける意味はないよ。
> 同じソースファイルをマクロ定義で関数名など切り替えて、
> コンパイラオプション変えて2回コンパイルするのよ。

意味はあるだろ。SSE使えないマシンはどうするの?
実行ファイルのサイズも無駄に大きくなるし。

> その前後のC/C++で書いたコードのコンパイラの最適化を阻害するんですよ。
> 実際に比較実験をしたからこそ言える話でしてね。

これってどんなコード書いたの?
最適化を阻害するとか言う話があるから、組み込んだ後、
速度チェックしてみたけど、特に速度が落ちたりはしなかったんだよね。
グローバル変数使ってたりはしないよね?

602 名前:デフォルトの名無しさん :2005/03/30(水) 04:28:49
>>601
アセンブラの話題と全く関係ないのですが、グロ-バル変数よりローカル変数の方が最適化されやすいのでしょうか?
ローカル変数の方が毎回生成されるため、遅くなると思っていたのですが。
例えば、

int i,j;
fot (i=0;i<10;i++)
{
    for (j=0;j<10;j++)
    {
    ....................
    }
}
より

fot (int i=0;i<10;i++)
{
    for (int j=0;j<10;j++)
    {
    ....................
    }
}

の方が高速なのでしょうか?

603 名前:デフォルトの名無しさん :2005/03/30(水) 04:42:12

グローバルは、メモリからいちいちロードする手間がかかりますので
はっきりいって遅いです

ローカルはコンパイルのときに適切なレジスタに値が設定され
ロードの手間が要らないので早いです

その例では最適化は同じはずですよ
通常では関数をまたいだ1ファイル内の共通の変数を
グローバル変数と呼びますけど

604 名前:デフォルトの名無しさん :2005/03/30(水) 06:25:26
fot (int i=0;i<10;i++) 
{
    double *a = new double[100];
    .
    .
    .
    delete [] a;

はどうなんでしょう?
for外で作成した方がよいのでしょうか?

605 名前:デフォルトの名無しさん :2005/03/30(水) 06:42:53
>>604
ヒープをループ内で作ったり削除したりはやばいですね
メモリが断片化しやすいですし
何よりもnewはメモリ作成までの工程がたくさんあって
この例だと確実に超遅いです

ヒープは多くのメモリを確保した後使いまわしたほうが
速さ的にはいいですが
初心者は使う場所よって確保したのち
その場で開放するのが無難かと
しかし気を付けないとバグも出やすいですし
メモリの開放を忘れたりして
初心者にはお勧めできません

デフォルトでスタックメモリは十分確保されてるので
配列は普通に

double a[100];
for(int i=0; i<10; i++) {
a[i] = ......;
}

のほうがいいと思います

606 名前:デフォルトの名無しさん :2005/03/30(水) 07:02:11
605に補足ですが
呼び出した関数のループ内で
同じ関数を呼び出す(再帰呼び出し)回数が多すぎると
確実にスタックメモリがたらなくなるので
注意してください

607 名前:デフォルトの名無しさん :2005/03/30(水) 07:57:17
VC++で簡単なプログラムを作ってみました。
何台かのPCで動作確認したところ、
一部のPCで「MFC71D.DLL」が見つからない というエラーが出て動作しませんでした。
ランタイムのようなものが必要なのかと思い、自分でも調べてみたのですが解決できませんでした。
原因と解決策が分かる方おりましたら、ご指導よろしくお願いします。

608 名前:デフォルトの名無しさん :2005/03/30(水) 08:02:54
607
プロジェクトのプロパティでMFCライブラリにスタティックリンクに設定

609 名前:デフォルトの名無しさん :2005/03/30(水) 08:50:58
>>607
ぉぃぉぃ
それデバッグ版じゃないか

610 名前:デフォルトの名無しさん :2005/03/30(水) 09:17:01
>>607
>609に補足。デバッグ版を配布しちゃいけません。

611 名前:デフォルトの名無しさん :2005/03/30(水) 11:25:31
>>598
>ファイルを1行ずつ処理しながら
が何してるかわからんけど、一気に読み込んで一気に処理するとかできんの?

612 名前:デフォルトの名無しさん :2005/03/30(水) 11:47:55
あのですね、初歩的なことだったら申し訳ないんですが、スタティックテキストのサイズを変更したいときはどうすればいいですか?

613 名前:デフォルトの名無しさん :2005/03/30(水) 11:55:14
>>601
>前半
速度が必要な部分だけ抜き出して別ソースファイルにして、
マクロで関数名を変えてコンパイルして、x87用とSSE2用の2つのオブジェクトを作って、
それを呼ぶ側が条件分岐するなり、関数ポインタ書き換えるなりで、呼び分けるのよ。

>後半
MD5チェックサムを求める何の変哲もないコードです。
グローバル変数は使ってないです。

x = (x << n) || ( x >> (32-n)) ;

__asm { ROL x, n} に置き換えると、元の1.2〜1.4倍くらい実行時間でした。
x = _lrotr(x, 32-n) ; に置き換えると、0.7〜0.8倍くらいの実行時間でした。


614 名前:612 :2005/03/30(水) 11:56:17
ごめんなさい、自己解決しました・・・・

615 名前:デフォルトの名無しさん :2005/03/30(水) 12:14:18
>>598
たかが50KBのファイルを読み込み処理するのに、時間がかかるなんてことはありえないけどね。
いつの時代のPC使ってるの?って突っ込みたくなるかも。
486時代?

616 名前:601 :2005/03/30(水) 14:56:41
>>613
>前半
すまん早とちりしてた。

>後半,600
関数内の話?
関数外の最適化に影響が出るって話だから、
そっちが気になっているんだが。
まあ、これ以上はスレ違いになっちゃうが…。

617 名前:613 :2005/03/30(水) 16:08:23
>>616
関数内の話です。


618 名前:デフォルトの名無しさん :2005/03/30(水) 16:47:00
>>613
そんな使い方で遅くなるとか言ってたのかよ。


619 名前:613 :2005/03/30(水) 18:07:23
>>618
実際にはSSE2を使ってますが、
ここに例として上げるのは大変なので、
最もシンプルなものを例として選びました。

※ROLとRORが違うのは、RORのほうが微妙に速いからなので、気にしないで。

620 名前:デフォルトの名無しさん :2005/03/30(水) 18:10:12
ウィンドウクライアント領域の座標を GetClientRect みたいに
相対座標じゃなくて、画面左上を(0,0)としてみた絶対座標で得たいのですが、
どうすればいいでしょうか?

621 名前:デフォルトの名無しさん :2005/03/30(水) 18:30:34
>>620
ClientToScreen

622 名前:デフォルトの名無しさん :2005/03/30(水) 19:12:19
おぉ! そんな便利な関数があったのですね!
どうもありがとう御座いました!

623 名前:デフォルトの名無しさん :2005/03/30(水) 19:15:08
>>622
それってAPI質問箱スレにする質問かと...

624 名前:デフォルトの名無しさん :2005/03/30(水) 21:16:46
VC7.1。
int main(){
using namespace std;

for(int i=0;;){}
int j;

return 0;
}
fatal error C1506: ブロックが大きすぎて、コンパイルできません。

using〜がなければ通る。
iの宣言を外に出せば通る。

・・・・・・orz

625 名前:607 :2005/03/30(水) 21:23:05
回答ありがとうございました。
皆さんの回答を手がかりに、なんとか解決できました。

626 名前:デフォルトの名無しさん :2005/03/30(水) 22:16:22
SDIのアプリ作ってるんですけど、
Scroll使ってもリストビューがそのままなのはどうしてでしょうか?

627 名前:デフォルトの名無しさん :2005/03/31(木) 01:43:49
for(int i=0;;){}
int j;

int i=0;
while(){}
int j;

どこが問題でしょうか。

628 名前:デフォルトの名無しさん :2005/03/31(木) 01:44:54
>>627
条件がないぞ

629 名前:デフォルトの名無しさん :2005/03/31(木) 01:53:47 ?###


630 名前:デフォルトの名無しさん :2005/03/31(木) 02:40:08
void function()
{
float a=123.0f;
または
const float a=123.0f;

......
......
}

aの値は変化せず参照だけしたい時どっちが正しいのでしょうか
またコンパイルした時最適化に違いはあるのでしょうか
環境はVC6です

631 名前:デフォルトの名無しさん :2005/03/31(木) 03:15:00
>>630
自分で答を出しているじゃないか。「変化しない」ときにconstをつけずにいつつけるんだ?

632 名前:デフォルトの名無しさん :2005/03/31(木) 04:04:29
>>631
レスありがとう

const が変化しないときに付けるのは分かってるんですが
ローカル変数はコンパイルした時、確かレジスタに値が設定されると思います
const をつけていると、定数となってその値が
メモリに設定されてしまうのではないかと心配なのです
メモリに設定されると、ロードする手間が増えると聞いた事があるのですが...
もしそうなら const を付けないで行こうと思っているのですが

633 名前:デフォルトの名無しさん :2005/03/31(木) 04:04:32
>>630
602と同じ人か?
一応constをつけた方が最適化されやすいとされている。
ただ、constは読みやすくしたり安全性を高める物であって
そういう風に気にするのはあまりよろしくないぞ。

634 名前:デフォルトの名無しさん :2005/03/31(木) 04:13:32
>>633
レスありがとう
残念ながら602ではありませんw

なるほど、そういうことですか
const のほうが最適化されやすいだけと言うことですね
その方向でやってみます

性格のせいか細かいところについつい目がいってしまって
おかげでコーディングがぜんぜん進みませんw

635 名前:デフォルトの名無しさん :2005/03/31(木) 05:17:32
山師さん@トレード中 :2005/03/30(水) 23:54:44 ID:txMVkxYQ
社名 株式会社エムステーション・ドットコム 株式会社エムスタ
英文社名 M Station.com inc. m-sta.com inc.
設立年月日 2000年6月6日 2000年2月15日
代表者 代表取締役社長 金 鎭浩(キム ジンホ) 代表取締役社長 金 鎭浩(キム ジンホ)
本社所在地 〒150-0002 東京都渋谷区渋谷3丁目26番20号 三鱗渋谷ビル 〒150-0002 東京都渋谷区渋谷3丁目26番20号 三鱗渋谷ビル
資本金 11億7560万 1億7560万
従業員 - 55人
役員 代表取締役社長 金 鎭浩
代表取締役副社長 崔 弘林
副社長 菊地原 靖孝
取締役常務 野口 秀
取締役 堀江 貴文←←←←←←←←←←←←←←←***
(株式会社オン・ザ・エッヂ代表取締役)

636 名前:デフォルトの名無しさん :2005/03/31(木) 06:22:55
MS-DOSのdir みたいな物を作りたいんで、_findfirst って関数を知ったんですが、
これだと、\\aaa\b\ という形式であらわされるパスにはアクセスできないんです

他にCFileFind とかいろいろ試したんですが、
どれもうまくいけないんで、どの関数を使えばいいんでしょう

637 名前:デフォルトの名無しさん :2005/03/31(木) 08:29:19
>>636
WinAPIでよければ...
FindFirstFileとFindNextFileとを組み合わすしかなかったと思うたが
この二つで検索すればどっかにいいサイトあるから
他の方法ものっとるかも

638 名前:デフォルトの名無しさん :2005/03/31(木) 09:05:35
>>636
\\aaa\b\の書き方出来なかったっけ?
\\aaa\\b\\*.* も駄目か?
駄目なら、_chdir使ってみ。

639 名前:デフォルトの名無しさん :2005/03/31(木) 09:11:04
>>634
細かいことを気にするなら、それぞれをReleaseビルドでアセンブリ出力を見比べてみればよろしい。
const だからと言って、メモリに割り付けられるとは限らない。

640 名前:デフォルトの名無しさん :2005/03/31(木) 09:13:12
>636はバックスラッシュをエスケープしてないんじゃなかろか。

641 名前:デフォルトの名無しさん :2005/03/31(木) 09:21:12
たぶん636はUNCパスのことを言いたいんじゃないかと思う。

642 名前:デフォルトの名無しさん :2005/03/31(木) 09:27:54
>>641
それが判ってないのは>638だけジャマイカ。

643 名前:デフォルトの名無しさん :2005/03/31(木) 09:38:07
>>642
ごめんなさい。

644 名前:デフォルトの名無しさん :2005/03/31(木) 15:51:01
foo.bar
と、
foo::bar
の違いが分かりません。
VC++プログラムでは前者はあまり見ないんですが、もしかして使っちゃダメとか?
あと、オブジェクトのインスタンスはどこで作るべきなのか、ご教授ください。

645 名前:デフォルトの名無しさん :2005/03/31(木) 15:52:17
構造体とクラス

646 名前:デフォルトの名無しさん :2005/03/31(木) 15:55:34
>645
失礼、foo.barでbar関数の事ってありますよね・・・?

647 名前:デフォルトの名無しさん :2005/03/31(木) 15:58:48
>>645
文脈も読めないなら書くな。

>>644
前者のfooはオブジェクト(実体)。後者のfooはクラス(または構造体)。
例えば、
struct Foo {
int func();
static int static_func();
} foo;
ならば、
foo.func()かFoo::static_func()で呼び出すことになる。

つーか、C++の基礎の勉強して来いや。

648 名前:デフォルトの名無しさん :2005/03/31(木) 16:07:13
やっぱり基礎でしたか・・・・わかりました。勉強しなおしてきます。
で、ですね、最後に、インスタンスはどこで作れば良いでしょうか?

649 名前:デフォルトの名無しさん :2005/03/31(木) 16:32:43
>>648
必要なところで。

インスタンスを作る≒変数を宣言するかnewを呼ぶこと。

650 名前:デフォルトの名無しさん :2005/03/31(木) 16:50:01
コーディングとは一切関係なく、環境に関しての質問ですが、
Xkeymacsを使って、エディタのキーバインドをEmacs風にしていると、
Shift+Ctrl+Bとか、Ctrl+F5とかの元々VCに登録されていたショートカットが機能しなくなるのですが、
それを解決する方法ってありますでしょうか。


651 名前:デフォルトの名無しさん :2005/03/31(木) 17:31:32
>>639
レス遅れてすみません
アセンブリ出力の比べ方がちょっと分からないですが
あとは自分で調べてみます
ありがとうございました

652 名前:デフォルトの名無しさん :2005/03/31(木) 18:33:41
出戻りプログラマです。
VC++6.0使ってみたんだけど、APIの一覧ってのはヘルプに無いのかな?

本買わないとダメ?
昔はAPIバイブルなんてあったけど今もあるのかな?

653 名前:デフォルトの名無しさん :2005/03/31(木) 18:52:10
>>652
http://msdn.microsoft.com/library/en-us/winprog/winprog/windows_api_reference.asp
Functionsから辿っていくと一覧がある

654 名前:デフォルトの名無しさん :2005/03/31(木) 19:05:46
>>652
MSDNがインストールしているなら
プラットホームSDKカテゴリに載ってる筈です

655 名前:デフォルトの名無しさん :2005/03/31(木) 19:30:33
何がなんだか良く分からなくて、とりあえず
新VisualC++.NET入門とかいう本を買ったんですが、
さっぱりです・・・いい解説ページみたいのないでしょうか

656 名前:デフォルトの名無しさん :2005/03/31(木) 20:21:42
>>654
あの...
どの解説本か分かりませんが初心者用の
.NETの解説本にはWinAPI一覧は載っていないのでは?
それにVC6と.NETは別物ですし
まずVC6よりWindowsAPIの参考書を買ったほうがいいと思います

とりあえずMSDNは
MSDNのディスクを入れウィザードに従って
標準インストールして後、VC6を立ち上げ
メニューのヘルプ->検索を選択、
キーワードにCreateWindowで探せば
プラットホームSDKにたどり着くと思います

後は、同僚の方に聞いていただくか
検索エンジンで調べたりして
ご自分で解決していただくしかないかと...
失礼かもしれませんがこれからも大丈夫なんでしょうか?
心配ですね...

657 名前:デフォルトの名無しさん :2005/03/31(木) 20:35:33

|///~~|    _______
|///  | → |////|
|________|   |////|
        ~~~~~~

ある操作をした時、
ウィンドウを /// 部分と同じサイズに変更したいんですけど、どうすればいいでしょうか。
現在は、クライアント領域の幅と高さを保存していて、その値を用いて MoveWindow で
ウィンドウを動かしているのですが、それだと、期待した大きさよりウィンドウが小さく
なってしまいます。

Window をクライアント領域の幅と高さにあわせた移動をさせたいのです。
こういうことって、簡単に出来ないのですか?

やはり、タイトルバーの大きさを得て、枠の大きさを得て・・・とイチイチやっていかなければ
うまくいかないものなのでしょうか? このへたくそな説明で理解できる方どうか、ご教授ください ;;

658 名前:デフォルトの名無しさん :2005/03/31(木) 20:40:01
>枠の大きさを得て・・・とイチイチやっていかなければ
イチイチやらんといかんと思うよ。大きさ変更枠はシステムで変えれるし。

659 名前:デフォルトの名無しさん :2005/03/31(木) 20:49:52
>>657
MoveWindowはウィンドウ全体のサイズを設定するから
クライアント領域のサイズで合わせると
外枠の分小さくなるのは当然
GetWindowRect使ってウィンドウ全体の値を保存してみそ

660 名前:デフォルトの名無しさん :2005/03/31(木) 20:55:36
>>569
変えたいのはクライアントのある領域の大きさでしょ?

661 名前:デフォルトの名無しさん :2005/03/31(木) 21:35:27
クライアント領域の大きさをユーザーに決定してもらって、
その大きさに合わせて、ウィンドウのサイズも変更させたかったのです。

>大きさ変更枠はシステムで変えれるし。
これで納得できました。一つ一つサイズを得る方向で考えることにします。

レス下さった>>659さんもありがとうございました。


662 名前:デフォルトの名無しさん :2005/03/31(木) 22:07:43
ファイルを右クリック→プログラムから開く
で自分のプログラムはしらせるときにそのファイル名を取得するにはどうしたらよいでしょうか?

Microsoft Visual Studio .NET 2003

663 名前:デフォルトの名無しさん :2005/03/31(木) 22:19:39
意味わかんない

664 名前:デフォルトの名無しさん :2005/03/31(木) 22:24:21
>>662
GetCommandLine

665 名前:デフォルトの名無しさん :2005/03/31(木) 22:30:59
>>664
さんくす

666 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 01:37:51
VS.NET2003使ってます。
ボタンとかをXPスタイルにするのってどうやるんでしょうか

667 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 01:51:27
コモンコントロールマニフェストでググれ

668 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 02:08:56
>>667
さんくすこ!

669 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 02:10:46
newやdelete演算子をオーバーロードした場合の動作って、どうなるのでしょうか?
オーバーロードした処理に完全に置き換わるのかと思ったのですが、newをオーバーロードしてもコンストラクタはしっかり呼ばれるようで。
例えばnewのオーバーロードの中身を
int i = 0;
だけ。などまったく意味のない処理に置き換えたとしても、フリーストアへのメモリの確保なども従来どおり行っているのでしょうか?

670 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 02:59:25
なんかめんどくさい事わざわざやってる気がする
絶対必要なの?
普通にnew,deleteでいいんじゃない
下手に回りくどくやっても虫が湧くもとだと思うけど

671 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 04:07:08
PrintPreviewDialogの印刷を開始するボタンを無効にできませんか?

672 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 09:29:58
>>669
newをオーバーロードするとoperator newの中身を処理した後、
その戻り値をthisポインタにしてコンストラクタが呼ばれる。(newの結果もそのポインタになる。)
operator newの戻り値はクラスのポインタではなくvoid *となっているのは、
operator newを行った時点では(コンストラクタが呼ばれていないので)まだインスタンスは出来上がっていないから。

operator deleteは逆にまずデストラクタを呼び出してからoperator deleteが呼ばれる。
デストラクタを呼んだ後だからもはやただのメモリブロックを表すに過ぎないからこの引数もvoid *。

operator new[]/delete[]も同様。

もちろんhoge::operator new()とでもして呼べばそれはただの関数呼び出しと解釈されるのでコンストラクタは呼ばれない。


673 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 11:11:37
VCの話題か?

674 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 12:05:08
>>670
C-MAGAZINEに載っていたタスクシステムを色々解析していて疑問に思ったのです。
でもまぁnewとdeleteをオーバーロードしなくても他の方法でもいいような気がしないでもない・・・。
>>672
ありがとうございます。ということは、newをオーバーロードしてもメモリの確保は行われるのですね。
わざわざnewをオーバーロードするのだからそのあたりは便利なところか…。

675 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 12:14:02
> newをオーバーロードしてもメモリの確保は行われるのですね。
え?

676 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 12:24:45
皇紀じゃつまんないな。
他の板はいろいろバリエーションあるのに。

677 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 12:30:15
デスマーチ投入2665人目
デスマーチ2665年目
連続労働時間2665分目

こんなのどうよ
最後だけリアルだけどw

678 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 12:39:55
>>674
メモリの確保を自分でやるためのoperator new/deleteのオーバーロードだ。
コンパイラはコンストラクタ/デストラクタを呼ぶコードを吐くだけ。
メモリ確保/解放はoeprator new/deleteの中の人の仕事。

679 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 13:08:18
>>661
AdjustWindowRect

680 名前:652 :皇紀2665/04/01(金) 14:53:13
>>653-654

見つけられました。どうもありがとう。

681 名前:652 :皇紀2665/04/01(金) 14:54:05
655は私ではないです。(^−^;

682 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 15:08:14
今だにオーバーロードとオーバーライドの違いが分からん
馬鹿だなあ俺

683 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 15:32:02
そうだな。

684 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 15:58:03
>>682
オーバーロード:引数が違う
オーバーライド:派生クラス

685 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 16:08:15
VCの話題か?

686 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 17:47:20
オーバーロード:関数名同じ、引数違う
オーバーライド:関数名同じ、引数同じ、派生クラス

687 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 17:47:49
今からだと、VC++.NETは買わない方がいいですか?

688 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 17:53:49
本にBMPファイルのピクセル列の並びはBGRの順って
書いてあるんですけど、
調べてると(ソースとか)、RGBの順で読み込んでるような気がするんです。
struct t_color {
BYTE r,g,b;
};
t_color* pPixel = ピクセル先頭位置;
みたいにして。

本はエンディアンの都合で書いてるのか、詳細が書かれてなくて訳が分かりません...。
BMP操作は何回かやってるんですが、すぐ忘れてしまう...

689 名前:デフォルトの名無しさん :皇紀2665/04/01(金) 17:55:06
>>687
初心者にはオススメ。玄人には....説明不要。

690 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 21:29:02
>>689
そうですか。ならば購入を検討したいと思います


691 名前:689 :int 2ch =05/04/01(金) 22:05:37
>>690
DirectXの解説サイトとか多くのサイトがVisualC++中心で
プログラム組んでるので、サンプルソースにVisualC++のプロジェクトファイル
を含んでいる(別に必要無いかも...)が結構有るので便利だと思います。
自分も初心者なので、あくまで参考にして下さい...。

692 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 22:08:13
日付がintになったか…。

>>687
VS2005が出るまで待つって事?

693 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 22:09:46
DirectXに限らずWindows上で動くプログラムのサンプルなら、
かなりの場合VCのプロジェクトファイルが付いてくる。

694 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 22:58:55 ?###
その割には解説サイトが少ないよなぁ・・
書籍では結構あるけど。

695 名前:デフォルトの名無しさん :int 2ch =05/04/01(金) 23:30:35
解脱サイトなら…

696 名前:688 :int 2ch =05/04/02(土) 01:48:27
どうやら本は正しい様で。
ソースの方が間違ってたらしい。(本に付属のものじゃない)
構造体メンバをr,g,bの順に定義して
SetPixel(hdc,x,y,r<<16 | g<<8 | b);//rの正体=b, bの正体=r
とやってるから結果的に正しく表示されていただけ。
まぎらわしい...


697 名前:688 :int 2ch =05/04/02(土) 01:49:35
sage忘れた...

698 名前: :2005/04/02(土) 18:31:56
VC7.1はテンプレートのexport使えるのですか?

699 名前:デフォルトの名無しさん :2005/04/02(土) 20:00:40
もちろん出来ません。

700 名前: :2005/04/03(日) 00:32:18
>>699
どうもありがとう。テンプレートのフル実装はなかなか終わらないね。

701 名前:デフォルトの名無しさん :2005/04/03(日) 13:32:52
スクリーンキーボードを作ろうとしているのですが、
SendInputを使用して実現しようとしています。

フラグにKEYEVENTF_UNICODEを用い、
どのキーボード配列でも入力可能にしたいのですが、
UNICODEを使用すると入力された文字が変換待ちの全角になってしまいます。
Windowsのコントロールパネル内のキーボードを英語既定にするとうまくいくのですが、、、
IMEが関係しているのでしょうか?


702 名前:デフォルトの名無しさん :2005/04/03(日) 18:47:18
答えようと思ったが、マルチだったのでやめた

703 名前:デフォルトの名無しさん :2005/04/03(日) 18:55:51
文字列をstd:stringなどを使いたいのですが、std::stringはどうもUNICODE環境をサポートしていないようです。
例えばFindWindowへの引数などに使いたいのですが、std::string以外に扱いやすい文字データ型はないでしょうか?

704 名前:デフォルトの名無しさん :2005/04/03(日) 20:43:47
CString

705 名前:デフォルトの名無しさん :2005/04/03(日) 20:45:09
>>703
std::wstring

706 名前:デフォルトの名無しさん :2005/04/03(日) 20:46:35
>>703
std::basic_string<TCHAR>
俺はusingも兼ねてtypedef std::std::basic_string<TCHAR> tstring;として使っている。

std::stringはstd::basic_string<char>からのtypedef。
ちなみにstd::wstringもある。もちろんstd::basic_string<wchar_t>からのtypedef

707 名前:デフォルトの名無しさん :2005/04/03(日) 21:43:37
NT系OSでのCPU使用率の取得方法を教えてください。


708 名前:デフォルトの名無しさん :2005/04/03(日) 22:42:16
タスクマネージャから拾えば


709 名前:デフォルトの名無しさん :2005/04/03(日) 22:45:48
分からないなら黙っててください、すっとこどっこい!

710 名前:デフォルトの名無しさん :2005/04/03(日) 22:52:27
GetCPUShiyo-ritsu()

711 名前:デフォルトの名無しさん :2005/04/03(日) 22:57:33
CPUNannboTukotonnnenn()

のほうがあんぜんだと思います。

712 名前:デフォルトの名無しさん :2005/04/03(日) 23:06:35

毎回500分の1で抽選して、その結果を出力する
プログラムはどうやって書けばいいんですか?(C、C++)

713 名前:デフォルトの名無しさん :2005/04/03(日) 23:12:09
1〜500の乱数を発生させて、(以下略

714 名前:デフォルトの名無しさん :2005/04/03(日) 23:16:22
分からないなら黙っててください、無能野郎!

715 名前:デフォルトの名無しさん :2005/04/03(日) 23:25:43
GohyakuBunNoIchiDeAtaruFunction()

716 名前:デフォルトの名無しさん :2005/04/03(日) 23:41:19
OmaemitainaYatunihaOsienaiFunctoin();

717 名前:デフォルトの名無しさん :2005/04/03(日) 23:47:08
>>716
ふぁんくといん?

718 名前:デフォルトの名無しさん :2005/04/04(月) 00:05:03
>>703-706
ありがとうございます。
でも、std::wstringだとLPCTSTRなどを引数に渡す関数に使えないことないですか?
.c_strで渡しても、const wchar_t *(void) const' から 'LPCWSTR' に変換できませんといった
エラーになってしまうのですが…。

719 名前:デフォルトの名無しさん :2005/04/04(月) 00:05:54
>>713
乱数の生成が分からないんだよ

rand()

なんていったら殺すぞ、このやろう

720 名前:デフォルトの名無しさん :2005/04/04(月) 00:14:04
randSuperMarkU()

721 名前:デフォルトの名無しさん :2005/04/04(月) 00:15:37
低レベルなかたばっかだね(プゲラ

722 名前:デフォルトの名無しさん :2005/04/04(月) 00:15:55
int i = time(NULL) + (int)GetCurrentProcessId();
srand(i);

int j = ((1.0 / (RAND_MAX + 1.0)) * rand()) * max + 1;


数年前の変なソースからコピペ

723 名前:デフォルトの名無しさん :2005/04/04(月) 00:25:16
>>719
boost::random
適当に言ってみたら本当にあった。

724 名前:デフォルトの名無しさん :2005/04/04(月) 00:27:04
なぁ、おまいらって結局他人様が作ったライブラリが
なけりゃなんにもつくれないんだろ

一からおこしたことなくね?

725 名前:722 :2005/04/04(月) 00:29:33
C初心者の頃に頑張って書いたコードは無視ですかそうですか・・・今も大して変わりませんが

726 名前:デフォルトの名無しさん :2005/04/04(月) 00:40:05
>>725
>>724はrand()使ってるのが気に入らないんじゃないの?
やるなら自前で全部書けと。


727 名前:デフォルトの名無しさん :2005/04/04(月) 00:56:13
>>718
LPCTSTRはUNICODEビルドか否かでLPCWSTRかLPCSTRに置き換えられる。
一方std::wstringはUNICODEビルドかどうかで影響を受けない。

728 名前:デフォルトの名無しさん :2005/04/04(月) 00:59:06
まず乱数の種を取るのに何を使うかが・・・変なセンサーでもPCに付けるの?温度センサーとか

729 名前:デフォルトの名無しさん :2005/04/04(月) 01:00:46
ハードウェア乱数生成器を搭載したチップセットがあったような希ガス。

730 名前:デフォルトの名無しさん :2005/04/04(月) 01:14:54
ラジヲとかテレビの局間ノイズは優秀だな

731 名前:デフォルトの名無しさん :2005/04/04(月) 05:16:45
乱数はメルヘンツイスターを使うといい。

732 名前:デフォルトの名無しさん :2005/04/04(月) 07:01:22
hoge()という関数はどのヘッダをインクルードすればよいのでしょうか?

733 名前:デフォルトの名無しさん :2005/04/04(月) 10:18:25
>>707
パフォーマンスカウンタ

使い方はPSDKのサンプル等を見てね
面倒くさかったらPDH使えば楽勝だけど、重いぞ。

この程度も回答できずに茶化す馬鹿が多いのは、嘆かわしい。

734 名前:デフォルトの名無しさん :2005/04/04(月) 10:39:07
>>718
だからstd::basic_string<TCHAR>使え。

std::basic_string<TCHAR>のc_str()はconst TCHAR *を返す。
typedef const TCHAR *LPCTSTR;だからstd::basic_string<TCHAR>のc_str()はLPCTSTRそのものだ。

735 名前:デフォルトの名無しさん :2005/04/04(月) 12:17:23
次は
std::basic_string<TCHAR> str = "ほにゃらら";

std::basic_string<TCHAR> str = L"ほにゃらら";
ができませんって言うに決まってる。

736 名前:718 :2005/04/04(月) 15:31:05
>>734
ありがとうございます。
やっとできました。単にc_str()と呼ぶところを.c_strだけと、()を抜いてしまっていたのが原因で・・・
std::wstring で動作させることができました。

初歩的ミスでお騒がせしました。釣ってきます∧||∧

737 名前:デフォルトの名無しさん :2005/04/05(火) 11:57:54
MFCのSDIで、
1.ウィンドウサイズを変更出来ない
2.常に最前面に表示
3.タスクバーから消す
を実装したいのですが、1と3の両立が出来ません。そういう仕様ですか?
解決策あるなら教えてたもれ。

738 名前:デフォルトの名無しさん :2005/04/05(火) 12:45:29
>>737
3はメインウィンドウを見えないウィンドウに所有させるか
ITaskbarListでごにょごにょ。

739 名前:デフォルトの名無しさん :2005/04/05(火) 16:07:20
最近VC++.NETを購入しました。
ウィンドウズアプリケーションを作るとき、MFCと.NETのフォームアプリケーション、どちらを使ったほうがよいのでしょうか。

740 名前:デフォルトの名無しさん :2005/04/05(火) 16:08:43
>>739
好きにしろ。

741 名前:デフォルトの名無しさん :2005/04/05(火) 16:17:22
同じようなものなのでしょうか?
できればどちらかを使ったときにどんな不都合があるのか知りたいのですが・・・
普通はどちらを使うのでしょうか。

742 名前:デフォルトの名無しさん :2005/04/05(火) 16:22:58
MFCでゲーム作ると笑える

743 名前:デフォルトの名無しさん :2005/04/05(火) 16:39:28
>>741
君にとっての普通とはなんぞや

744 名前:デフォルトの名無しさん :2005/04/05(火) 17:18:19
>>741
0から資料も何も見ずに作るのか?
そうではあるまい。
自分が既になんらかの資料を入手しているのならその資料を頼ればいいし、
そうでないなら先ず資料を探すといい。
どちらにしろ、自ずとどちらがいいか判るだろう。

君が何をしたいのかは君が書かない限り誰にもわからないのだよ。

745 名前:デフォルトの名無しさん :2005/04/05(火) 17:24:08
「本を読んだんですけど次に何をしたらいいですか」とか、
「デジカメ買ったんですけど何をしたらいいですか」と同列だね。
自分が何をしたいのか判っていないのだから、>744のような指摘は無意味だよ。

746 名前:デフォルトの名無しさん :2005/04/05(火) 17:33:23
すいません、本は買おうと思ったのですが、MFCを使う入門本とそうでない物があったので、どちらを買うか迷ったのです。
それで、どちらを中心に勉強するのがベストかなぁと・・・

747 名前:デフォルトの名無しさん :2005/04/05(火) 17:35:56
それぞれの特徴をググるなりして調べて、自分がやりたい方を選べばよい。

748 名前:デフォルトの名無しさん :2005/04/05(火) 22:23:48
.NETは.NET Frameworkというランタイムが無いと動かない。まだデフォルトで
入れていないPCも多いので、ユーザーにインストールさせる必要がある。20MBくらい
あるので面倒がられるかもしれない。MFCアプリもdllが必要だが、なんかのアプリの
インストールと一緒に入ってしまうことが多いからあんまり気にしなくて良いかも。
実行速度は.NETの方が遅いようなことをよく言われるが、それはアプリによるかな?
ただ、.NETアプリは起動が遅いので、嫌ならインストール時にバイナリー変換をするように
インストーラーを作ること。プログラミングは.NETの方が楽だとは思うが、APIを
併用しないといけない場面も結構あるので、そういう時は、.NETって何だろうと
思うかもしれない。尚、.NETの場合は逆コンパイルでソースコード丸見え状態になるので、
それが気になるなら別途難読化ツールとか購入する羽目になる。

749 名前:デフォルトの名無しさん :2005/04/05(火) 22:48:28
MFCのDLLはスタティックリンクしとけばええやん

750 名前:デフォルトの名無しさん :2005/04/05(火) 22:51:11
 Visual C++の本で、MFCを使わずにWinMain()関数とウィンドウプロシージャを自分で直接コーディングしていく
解説が書かれていても、メニューやダイアログボックスはリソースエディタが使われてる。
 中途半端だな、せっかくなんだから、それらもコーディングで作る方法解説してくれって思うんだけどな。何でそ
うしてくれないんだろうな。VBと同じようにビジュアルに編集して画面作ってもおもしろくないぞ。


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.