Win32API質問箱 Build ..
[2ch|▼Menu]
577:デフォルトの名無しさん
07/11/27 23:37:35
>>573
何を勘違いしてるのか知らんが、今時waveOut系を使ってるプレーヤーなんてほとんど無いから
waveOut系をフックしてもあまり意味無いだろって言ってるのだが。

578:550
07/11/27 23:42:01
なるほど、いろんな関数をフックしないといけないようですね。
だとすると、やはりフィルタドライバを作ったほうが抜本的な方法なのでしょうか。

579:デフォルトの名無しさん
07/11/27 23:43:55
>>577
デフォルトでASIO経由再生するプレイヤーの割合の方が遙かに少ないが、
いったい何を言ってるんだ?

580:デフォルトの名無しさん
07/11/27 23:44:09
>>578
だから何が目的なのかもっと具体的に書けよ

581:デフォルトの名無しさん
07/11/27 23:46:11
>>579
お前は人の揚げ足を取るのが趣味なのか?

582:デフォルトの名無しさん
07/11/27 23:48:02
お前ら勝手に盛り上がりすぎだろ

583:デフォルトの名無しさん
07/11/27 23:48:45
>>550
URLリンク(applian.com)


584:デフォルトの名無しさん
07/11/27 23:50:23
>>581
>今時waveOut系を使ってるプレーヤーなんてほとんど無いから
>waveOut系をフックしてもあまり意味無いだろって言ってるのだが。
といってASIOを挙げている時点で支離滅裂なんだが、
いったい何を考えているのか不思議でしょうがない。
そこに対する回答はないのか?

585:550
07/11/27 23:51:31
>>580
PC1で鳴っている音をLAN経由でPC2に送りたいんですよ。
PC1とPC2にはスピーカーとマイクが接続されていて、
サウンドデバイスは一つしかないと仮定します。

586:デフォルトの名無しさん
07/11/27 23:52:10
>>584
DirectSoundはどうした?
VistaでHALが廃止されたからって何が問題なんだ?

587:570
07/11/27 23:54:31
すまない。
自分が余計な事を言ってしまったがために話が盛り上がってしまった。
要は、waveInで登録したバッファの中身を解析すれば、音が鳴っているかどうかを判定できるということだったんだ。

588:550
07/11/27 23:54:48
PC1,PC2にそれぞれ一つのサウンドデバイス、という意味です。

589:デフォルトの名無しさん
07/11/27 23:54:58
>>585
そのPCにはリダイレクトに相当するものはないのか?

590:デフォルトの名無しさん
07/11/27 23:56:26
>>585
WindowsMediaEncoder をインストールするだけでいいよん

591:デフォルトの名無しさん
07/11/27 23:58:38
すでにあるものをわざわざ作る必要はなかろうもん

592:デフォルトの名無しさん
07/11/27 23:59:16
>>586
HALのサポートが期待できなければ、別の技術に置き換わっていくというだけの話。
で、DirectSoundの件に関しては答えたから、今度はASIOを挙げた理由を答えてくれよ。

593:550
07/11/28 00:00:48
>>589
その機能を使った場合、PC1に接続されているマイクは独立して使えるのでしょうか?

594:550
07/11/28 00:02:21
>>590
使用感はESounDのwindows版のようなものを想定しているのです。

595:デフォルトの名無しさん
07/11/28 00:02:34
>>593
マイクから音が拾いたければ、データの取得先をマイクに切り替えろよ。

596:550
07/11/28 00:04:07
GnomeのESounDはアプリケーションがESounDに合わせて作らないといけないところが違いますけれど。

597:デフォルトの名無しさん
07/11/28 00:04:16
>>592
あんたは勝手にwaveout使えばいいじゃん
DirectSoundやASIO使うやつにいちゃもんつけずにさ

598:デフォルトの名無しさん
07/11/28 00:05:01
盛り上がりすぎだw
俺も混ぜろバカチン共w

599:デフォルトの名無しさん
07/11/28 00:05:27
次回のテンプレにフックの話厳禁を入れておいた方がいいんじゃないか?
安易にフックに頼りすぎる上に、いつも話がろくな事にならない。

600:デフォルトの名無しさん
07/11/28 00:05:51
>>583 は無視ですかそうですか

601:デフォルトの名無しさん
07/11/28 00:06:20
>>592
>>570に対してwaveOutだけフックしても鳴ってる音全てをキャプチャできんよって言っただけだが
どうやらお前は570ではなくて、技術に拘った結果waveOutをマンセーしてるだけの変人だと分かったからもういいよ。

602:デフォルトの名無しさん
07/11/28 00:10:02
>>597
で、ASIOを挙げた理由は?

何も考えてなかったんなら後付で
>今時waveOut系を使ってるプレーヤーなんてほとんど無いから
>waveOut系をフックしてもあまり意味無いだろって言ってるのだが。
とか理由をでっち上げずに、正直に理由はないけどASIOと書きたかっただけだと言えばいいのに。

どうせ逃げ回るだけでASIOを挙げた理由を答えることも無いのは分かってるよ。
ごめんね、ちょっと苛めすぎたよ。

603:デフォルトの名無しさん
07/11/28 00:12:52
>>601
waveOutをマンセーしているとか、そう思いこみたいのは勝手だが、妄想にも程がある。
どこにそんなことが書いてあるんだ?

604:597
07/11/28 00:12:54
>>602
ASIOなんぞ挙げてませんよ?
今までのやり取りを見てて感じただけだ

605:デフォルトの名無しさん
07/11/28 00:13:06
>>602
は?今時のプレーヤなら大抵DirectSoundもASIOもサポートしてるだろ
その上で>>577>>601の意味で言ったのだが、何か問題でもあるのか?

606:550
07/11/28 00:15:30
>>600
ただいま検証しています。

607:デフォルトの名無しさん
07/11/28 00:17:03
>>605
実際の所、ASIOをサポートソフトはけっこう限られてくるよ。

608:デフォルトの名無しさん
07/11/28 00:17:42
もう誰が誰かすら分からんが、
さすがに「今時のプレーヤなら大抵ASIOもサポート」は無い

609:デフォルトの名無しさん
07/11/28 00:19:22
これからもASIO厨とwaveOut厨の喧嘩が続きそうだな

610:デフォルトの名無しさん
07/11/28 00:19:42
Windows Media PlayerでASIO使えるの?

611:デフォルトの名無しさん
07/11/28 00:22:23
少し夜風に当たって頭冷やしてこい

612:デフォルトの名無しさん
07/11/28 00:24:58
ASIOを舐めたらどんな味ぉ?

613:デフォルトの名無しさん
07/11/28 00:25:26
ASIO = Advanced Serial IO

614:550
07/11/28 00:26:33
>>600
音を送る側:クライアント
実際に音を鳴らす側:サーバ
というようにしたいわけです。
つまり、たくさんのクライアントに向けて音を送りたいわけではなく、
一つのサーバに向けて音を送りたいのです。

615:デフォルトの名無しさん
07/11/28 00:29:28
>>614
だから録音デバイスから普通に音を拾えよ
それを好きなだけ送れ
実際にやってみてそれでダメだったらまた来い

616:デフォルトの名無しさん
07/11/28 00:29:40
ASIOは入力用だっつーの

617:デフォルトの名無しさん
07/11/28 00:30:55
ふっくできるよ! できるよ!
って自分の技術に奇妙な自信を持ってるから、スレがカオスになるのではないかと予想

618:デフォルトの名無しさん
07/11/28 00:31:57
>>614
上にも出てるけどWindows Media エンコーダでできないか?

619:デフォルトの名無しさん
07/11/28 00:34:15
>>618
前にも思ったが、プログラミングのスレで既製品を進めてどうするんだと

620:デフォルトの名無しさん
07/11/28 00:34:53
>>616
ミキサーを通さないから音質が上がるということで、
出力用に愛用している人間は少数ながらいる。
検索すると音質が上がったと喜んでいる人間がたしかにいる。
しかし私には同じ音にしか聞こえない。

621:デフォルトの名無しさん
07/11/28 00:36:07
>>619
大抵はそれで済んでしまうことが多いから
まあ本人がそれでも0から作りたいっつーなら構わんが

622:デフォルトの名無しさん
07/11/28 00:36:53
>>620
ボリュームパスして大音量で再生されただけだろ
あほすぎる

623:550
07/11/28 00:38:47
>>618
>>614のモデルに合わせる使い方ができるでしょうか?

624:デフォルトの名無しさん
07/11/28 00:40:23
>>623
ここはプログラム板だから、ソフトの使い方は別の板へ逝け

625:デフォルトの名無しさん
07/11/28 00:43:04
サウンドカードのサウンドバッファが16bit以上をサポートしているなら音質は上がるかもしれない
128kbpsのmp3で満足するオレには分からんレベルだ

626:550
07/11/28 00:57:15
>>621
私も既製品で済むに越したことはないと思うのですが、
目的に合うものがないので作るしかないと思ったのです。

627:デフォルトの名無しさん
07/11/28 01:01:13
>>623
WindowsMediaEncoder
PortForwarder
sshd
これを組み合わせると可能

628:デフォルトの名無しさん
07/11/28 01:12:17
>私も既製品で済むに越したことはないと思うのですが、
ちょwwwwwww

ソフトウェア板でやってよwwwwwwwwwwwww
何のために100レスも消費してたんだwwwwwwwwwwwww

629:550
07/11/28 01:14:19
>>628
肝心なのは、直接目的に合うものが存在しないということですよ。

630:デフォルトの名無しさん
07/11/28 01:16:14
単に探し足りないだけ、解説を読み足りないだけだと思う

現に出来るだろ

631:デフォルトの名無しさん
07/11/28 01:17:40
>>627
SSHって必要か?

632:デフォルトの名無しさん
07/11/28 01:19:12
提示されたアプリについてまるで調べてないってのは分かるなあ〜
明らかに>>623なんてレス読んで脊髄反射で聞いてるよね。

633:デフォルトの名無しさん
07/11/28 01:27:07
要するに>>550はESounDみたいなサウンドサーバ/クライアントが作りたいんだろ
WindowsMediaEncoderだとストリーム配信みたいなことしかできないわな

634:デフォルトの名無しさん
07/11/28 02:10:45
>>629
多くのオーディオデバイスでは、リダイレクタ(ミキシング済みの音声出力を取り込める入力)が
使えるので、それを waveIn 等でとってくれば簡単に目的の処理が可能です。
(USB オーディオ等だと無いのが普通みたいだけど)

ESound のようなものを作るのなら遅延はたぶんあまり許容できないでしょうから、
Windows Media Encoder 等ではなくシーケンス番号付けて RTP で送るのが良いと思います。

>>593
リダイレクタを使う実装では PC1 の wave 入力を利用することになるので、PC1側のアプリでは
MICは利用できなくなります。PC1 に ASIO 対応の余分なオーディオデバイスを追加し、
それでPC1の(通常の)出力を取り込むなどできれば非常に簡単ですが、ハードの追加は
ダメなんでしょうか?

XP向けにフィルタドライバを書くのは恐らく非常に大変ですよ。

635:デフォルトの名無しさん
07/11/28 02:28:14
リモートデスクトップ接続、ってオーディオリダイレクタを
標準装備してるよね?

636:デフォルトの名無しさん
07/11/28 02:32:39
もうほっとけよ。
どうせWindowsMediaEncoderだって試してもいないだろうし。

637:デフォルトの名無しさん
07/11/28 03:34:50
>>636
WindowsMediaEncoderは役にたたんだろ。

638:デフォルトの名無しさん
07/11/28 03:34:58
単純な質問で悪いけど
ウィンドウを不可視状態で作成するのって、CreateWindowのウィンドウスタイル引数に
WS_OVERLAPPED ^ WS_VISIBLE でよかったっけ?
なんか見えるんだけど・・orz
「^」って排他的ウンタラだったよね?よね?

639:デフォルトの名無しさん
07/11/28 03:42:28
どうせShowWindow(hWnd,SH_SHOW);してるとかそういうオチ

640:デフォルトの名無しさん
07/11/28 03:46:20
WS_OVERLAPPEDはWS_VISIBLEを含んでない件

つまり
WS_OVERLAPPED & WS_VISIBLE → 偽
なので

WS_OVERLAPPED ^ WS_VISIBLE = WS_OVERLAPPED | WS_VISIBLE

641:デフォルトの名無しさん
07/11/28 06:17:14
すまん
>WS_OVERLAPPED ^ WS_VISIBLE = WS_OVERLAPPED | WS_VISIBLE
これわからん
こんなのあり?


642:デフォルトの名無しさん
07/11/28 06:23:04
0^1 = 1
1^1 = 0

643:デフォルトの名無しさん
07/11/28 06:39:07
>排他的ウンタラ

排他的論理和ですが何か?


きみのやりたいことはこっちではないかな?
WS_OVERLAPPED & ~WS_VISIBLE

644:デフォルトの名無しさん
07/11/28 06:39:59
>>641
わからんならWS_OVERLAPPEDだけ使え
故意に明示したいなら
WS_OVERLAPPED & ~WS_VISIBLE
こうじゃないか

645:デフォルトの名無しさん
07/11/28 06:40:39
かぶってしまった

646:デフォルトの名無しさん
07/11/28 06:47:23
珍子がかぶってる

647:デフォルトの名無しさん
07/11/28 07:18:54
もし最初から最後まで表示する気が無いなら、WS_OVERLAPPEDも
指定するだけ無駄だな。

648:デフォルトの名無しさん
07/11/28 09:31:58
TotalRecorderみたいなことがしたいのか?

649:デフォルトの名無しさん
07/11/28 09:58:31
>>546
デバッグ情報はデバッガで読み込めば良い

650:デフォルトの名無しさん
07/11/28 10:24:37
>>550は既存品がダメならH.323とそれに関係する資料見た方がよい
URLリンク(www.itu.int)

651:デフォルトの名無しさん
07/11/28 11:33:57
>>650
ESound みたいな使い方には既存のストリーミングサーバは
Windows Media Encoder は遅延が大きすぎて使えないってだけだろ。
VNC のアドオンでも作ってるんじゃねーの。

リモートデスクトップでのオーディオのリダイレクトみたいに、
フィルタドライバじゃなくてそれ専用の仮想デバイスを作っちゃう手もあるな。

652:デフォルトの名無しさん
07/11/28 12:00:48
>Windows Media Encoder は遅延が大きすぎて使えないってだけだろ。
だれもそんなことはいっていない。

>VNC のアドオンでも作ってるんじゃねーの。
だれもそんなことはいっていない。

>リモートデスクトップでのオーディオのリダイレクトみたいに、
>フィルタドライバじゃなくてそれ専用の仮想デバイスを作っちゃう手もあるな。
リモートデスクトップで確認してみれば自明だが、DirectSoundで音楽再生でもしようものなら音がとびまくる。

だれももいっていないことを勝手に想定したり、使い物にならない手段を提示したり、
いったい何がしたいんだ?

653:デフォルトの名無しさん
07/11/28 12:09:53
>>652
リモートデスクトップで音がとぶから仮想デバイスが使い物にならないだなんて飛躍しすぎだろ

654:デフォルトの名無しさん
07/11/28 12:28:02
>>652
質問者自身が ESound みたいなのを作りたいって言ってるジャンw
逆に>>650は質問のどこを見てプロトコルに関する質問だと思ったの?
学習困難児だった?

655:デフォルトの名無しさん
07/11/28 12:38:37
漏れが華麗に要件をまとめた

(1) ESounD のようなリダイレクタ
(2) 同時にMICも使いたい
(3) 取ってきた音は1つのサーバに送って、サーバで鳴らす

(2)があるから、入力を占拠する「音源ボードのリダイレクタ(+WME)」はダメ。
マイクロソフトの人間は仮想デバイスを使ったが、>>652が否定してるから
仮想デバイスはダメ。フィルタドライバは>>634が否定してるからダメ。

656:デフォルトの名無しさん
07/11/28 12:47:16
まだこのネタ続いてるのかよw
おまいらもういいだろww

657:デフォルトの名無しさん
07/11/28 12:54:35
質問者を置き去りにして外野が騒いでるのは滑稽だな
外野といってもあーだこーだ言ってるのは一人か

658:デフォルトの名無しさん
07/11/28 15:07:49
仮想デバイス作ればいいやん。
音飛びするのは帯域が足りてないだけかと。

659:デフォルトの名無しさん
07/11/28 15:23:53
>>550 に関しては、お前ら
1. windowsで流れているサウンドをフックすることは可能でしょうか?
2. もし方法があれば、調べれば良いポイント・キーワードなどを教えていただけないでしょうか。

1. Yes or No
2. if( 1. == Yes) 調べれば良いポイント・キーワードを教える
これだけ、答えればOK

余計な詮索、アドバイスせずにこれだけ答えてやれよ。俺俺妄想レスするなよ

660:デフォルトの名無しさん
07/11/28 15:34:23
ごめん汚して  でも見てほしい


【政治】 「放置すると、日韓関係にヒビ」 外国人参政権付与、成立への流れ加速も…公明に各党同調、自民反対派は沈黙、首相次第か★10

スレリンク(newsplus板:259番)n-


参考動画
URLリンク(www.nicovideo.jp)

661:デフォルトの名無しさん
07/11/28 16:25:06
HeapFreeしたときの戻り値が1404673とかなんだけど
これは何の数値?

662:デフォルトの名無しさん
07/11/28 16:39:43
なんだろうね
メモリアドレスではないみたいだからヒープハンドルかなんかかな

調べてないけど

663:デフォルトの名無しさん
07/11/28 16:48:01
>>662
調べてよ!
気になってよるしか眠れない!

664:デフォルトの名無しさん
07/11/28 16:50:13
寝れるならいいじゃない

665:デフォルトの名無しさん
07/11/28 16:59:02
昼寝したいのにー

666:デフォルトの名無しさん
07/11/28 18:02:32
666

667:デフォルトの名無しさん
07/11/28 19:17:16
        ____
       /      \
      / \   /  \  ネット社会の闇を見ました
    /  (●)   (●)  \   
    |     (__人__)     |  ________
     \    ` ⌒´    ,/ | |          |
    ノ           \ | |          |
  /´                 | | 
 |    l                | |   

668:デフォルトの名無しさん
07/11/28 19:20:28
ウィンドウサイズ変更時に、
一瞬背景色で描画され
ちらつくのですが、回避する方法は何かありませんか?

669:デフォルトの名無しさん
07/11/28 19:29:46
>>643-644
そうでしたorz
&と|は良く使うので、間違わないんだけど^と~は滅多に使わないのでごっちゃになってた
トンクス

670:デフォルトの名無しさん
07/11/28 19:31:15
>>649
そもそもデバッガが何のために付いてるのか良く分からん
使い方も分からんし

671:デフォルトの名無しさん
07/11/28 19:34:06
>>668
WNDCLASSのhbrBackgroundにヌルブラシを設定する
WM_ERASEBKGNDでTRUEを返す

672:デフォルトの名無しさん
07/11/28 20:01:27
~はかなりよくつかうだろ


673:デフォルトの名無しさん
07/11/28 20:23:50
ビットフラグを削除する時に使うね。

674:デフォルトの名無しさん
07/11/28 20:26:55
>>670
デバッグするために決まってるだろ
普通、開発はデバッグ版でして、バグがなければリリース版だろ

675:デフォルトの名無しさん
07/11/28 20:40:48
デバッガという名前なんだから勝手にバグを直してくれればいいのに
使えねーな

676:デフォルトの名無しさん
07/11/28 20:43:05
だったらバグのあるプログラムを書くんじゃねーよ下手糞とデバッガが仰ってます

677:デフォルトの名無しさん
07/11/28 20:54:04
この流れ好きだなぁw

678:デフォルトの名無しさん
07/11/28 20:58:48
そうか?

679:デフォルトの名無しさん
07/11/28 21:15:17
タスクバーの右側に
「ネットワークケーブルが接続されていません」とか「ワイヤレスネットワークに接続しました」
とか状態が表示されていますが
このネット接続の状態変化を監視するAPIを教えてください

680:デフォルトの名無しさん
07/11/28 21:22:53
GetIFTable?

681:デフォルトの名無しさん
07/11/28 21:44:19
>>680
そんな感じです。ただ今回は変更の検知をしたいのでこれは使えません
MSDNみたらGetIFTableの近くにNotifyAddrChangeというのがあったのでこれを調べて見ます
ありがとう

682:デフォルトの名無しさん
07/11/28 22:02:28
IPv6のネットワークポートで接続されている機器がある時、そのアドレスがLinkLocalであった場合に
付加するスコープIDの取得の仕方を教えてもらえないでしょうか。
IP Helper関数のGetAdaptersAddresses()を使って取得できる値のいずれからしいということは
わかったのですが、列挙される構造体のうち、どれが目的の値か特定できません。

683:デフォルトの名無しさん
07/11/28 22:56:11
hWndとhDCとDIBの関係がいまいちよくわからないんだけど、わかりやすく説明されてるサイトとかない?

684:デフォルトの名無しさん
07/11/28 23:50:05
ウィンドウにWS_EX_LAYEREDを設定し、32Bitビットマップを読み込み下の様にUpdateLayeredWindowを実行しましたが、
ウィンドウが消えてしまい、うまくビットマップを適用させることができません。
どこがおかしいか、何方か教えて頂けないでしょうか。

ReadFile(hFile , &bmpFileHeader , sizeof (BITMAPFILEHEADER) , &dwBytes , NULL);
bmpInfo = (BITMAPINFO *) malloc (bmpFileHeader.bfOffBits - dwBytes);
ReadFile(hFile , bmpInfo , bmpFileHeader.bfOffBits - dwBytes , &dwBytes , NULL);
bPixelBits = (BYTE *) malloc (bmpFileHeader.bfSize - bmpFileHeader.bfOffBits);
hdc = GetDC(hWnd);
hBitmap = CreateDIBitmap(hdc , &bmpInfo->bmiHeader ,CBM_INIT , bPixelBits , bmpInfo , DIB_RGB_COLORS);
hBuffer = CreateCompatibleDC(hdc);
SelectObject(hBuffer , hBitmap);
GetObject(hBitmap , sizeof (BITMAP) , &bitmap);
wndPos.x = 100; wndPos.y = 100;
surPos.x = surPos.y = 0;
wndSize.cx = 300; wndSize.cy = 300;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.AlphaFormat = AC_SRC_ALPHA;
bf.SourceConstantAlpha = 255;
UpdateLayeredWindow( hWnd, GetDC( 0 ), &wndPos,&wndSize, hBuffer, &surPos, 0, &bf, ULW_ALPHA);

長文ですみません

685:デフォルトの名無しさん
07/11/29 00:01:28
freeしたポインタをfreeしたらどうなりますか?多分よくないですよね?
freeされたかどうかを調べる関数とかってないですか?

686:デフォルトの名無しさん
07/11/29 00:10:35
>>683
HWNDはウィンドウ
位置を動かしたりサイズを変えたり、タイトルバーを設定したりできる

HDCは画家
ペンや絵の具を渡せば、三角形とか四角形とか円とかを描いてくれる

DIBはメモリ内の.bmpファイル

687:デフォルトの名無しさん
07/11/29 00:11:51
>>685
よくないです
調べる方法はありません
自分で気をつけましょう

688:デフォルトの名無しさん
07/11/29 00:18:25
>>684
ビットマップのイメージ本体を読み込んでないように見える
bPixelBits は malloc しただけでそのままだし
hBitmap も Create しただけで何も描き込んでないし

689:デフォルトの名無しさん
07/11/29 00:19:09
>>687
デバッグビルドならチェック入ると思うが

690:デフォルトの名無しさん
07/11/29 00:30:16
>>685
当たり前だけど、対象のポインタ変数にメモリが割り当てられてるかどうかは
ポインタがNULL番地をさして無ければいいわけだから
俺はいつも if(lpPoint != NULL) free(lpPoint) ってやってるが、もしかしたら正しくはないのかも知れん

>>686
ついでにCreateDIBSection関数が何者なのか、解説ヨロ
何度説明されても分からんけん


691:デフォルトの名無しさん
07/11/29 00:32:47
>>690
if(lpPoint != NULL) free(lpPoint)
これは無駄だろ

if(lpPoint != NULL) delete[] lpPoint
の場合なら意味あるけど

692:デフォルトの名無しさん
07/11/29 00:38:22
>>690
CreateDIBSection は指定したサイズのビットマップをメモリ内に作る。
GDI 関数で扱えるように HBITMAP ハンドルが返されるし、
その RGB 値を直接触れるように、ビットマップデータへのポインタも返される。

693:デフォルトの名無しさん
07/11/29 00:38:56
>>691
どっちも無駄
NULL を free とか delete とか delete[] に食わせるのは合法で、単に無視される

694:デフォルトの名無しさん
07/11/29 00:50:08
>>693
deleteも無駄だったのか・・・知らなかった

695:デフォルトの名無しさん
07/11/29 00:54:26
deleteしたあとNULL入れとくのが正解

696:デフォルトの名無しさん
07/11/29 01:30:03
if(lpPoint != NULL) {free(lpPoint); lpPoint = NULL;}
こうするのが正解

697:デフォルトの名無しさん
07/11/29 01:40:16
>>696
不正解

698:デフォルトの名無しさん
07/11/29 01:49:15
NULLだったら無視されるんだから
free(lpPoint);
lpPoint = NULL;
だけでいいじゃん…

699:デフォルトの名無しさん
07/11/29 02:02:02
K&Rにfreeで解放されたメモリ領域にfreeをかけるのは動作が規定されてないからやめとけって書いてあった希ガスよ
正しくは>>696のようにすべきじゃね、と思う

>>692
そういう説明は何百回も読んでるんだけど、さっぱりわかんねーよ
>指定したサイズのビットマップ ← これはデバイス独立ビットマップなのか、デバイス依存ビットマップなのか・・・
GDI関数で扱えるDDB(デバイス依存とかいう香具師)は、ビットマップのピクセルビットへはアクセスできない
HBITMAP型は通常デバイス依存ビットマップを表現するのに使われるはずだよ
なのに、ピクセルビットへのポインタもちゃんと返してくる
現にGetObjectで調べてみたら、pBitsにピクセルビットへのポインタが格納されてる
通常HBITMAP型のDDBを引数に、GetObjectやってもpBitsはNULLだよね

700:デフォルトの名無しさん
07/11/29 02:30:38
>>699
free(lpPoint);
lpPoint = NULL;
free(lpPoint);

と、

free(lpPoint);
free(lpPoint);

は違う。
おまいが言っているのは後者。

701:デフォルトの名無しさん
07/11/29 02:48:31
>>699
DDBのビットデータに直接アクセスできるわけない
大抵VRAM上にあるだろうし、DirectXじゃないから直接アクセスできてもあまり意味が無い

>HBITMAP型は通常デバイス依存ビットマップを表現するのに使われるはずだよ
お前の「通常」の基準がよく分からん。DDBで使うことの方が多いと思うが。

DIBもDDBもHBITMAPなのは、ある程度両者を意識しなくて済むようにそういう設計にしてるのか
DIBセクションが標準APIとして加わったのがwin95以降だからなのか他に理由があるのかは知らん

702:デフォルトの名無しさん
07/11/29 03:31:48
>>688
レス、有難うございます
>>ビットマップのイメージ本体を読み込んでいない

すみませんm(__)m
初歩的なミスに気付いていませんでした

ReadFileをもう一つ追加して見ます

703:デフォルトの名無しさん
07/11/29 06:31:35
>>701
>HBITMAP型は通常デバイス依存ビットマップを表現するのに使われるはずだよ
お前の「通常」の基準がよく分からん。DDBで使うことの方が多いと思うが。
デバイス依存ビットマップ=DDB

704:デフォルトの名無しさん
07/11/29 08:12:20
>>697
速度重視なら正解だろ

705:デフォルトの名無しさん
07/11/29 08:19:13
>>704
一概には言えない
lpPointがNULLの可能性が高い場合はいいが逆だと遅くなる

706:デフォルトの名無しさん
07/11/29 08:26:40
>>705
そこまで行くとそもそも論になるからもう止めようぜ

707:デフォルトの名無しさん
07/11/29 08:27:10
>>699
DIBセクションは、DIBの形でデータを保持していて、
HBITMAP経由で読み書きするときには、
その都度DDBとの間で変換が行われる。

ってプログラミングWindowsに書いてあった。

708:デフォルトの名無しさん
07/11/29 10:05:52
今時if文判定1個にこだわるプログラミングしてるやつがいることに驚きだわ

709:683
07/11/29 10:22:06
>>686
ではなぜBitBltではDIBではなくhDCを渡すのでしょうか。
あと、DIB間での画像拡大コピーってできますか?

710:デフォルトの名無しさん
07/11/29 10:25:59
>>709
DIBとDDBの違いわかってる?

711:デフォルトの名無しさん
07/11/29 12:24:28
>>710
>>709が解ってないのはDIBとDDBの違いではなく、DCにビットマップを選択させる概念ではないかと

712:デフォルトの名無しさん
07/11/29 12:26:35
DIBとDDBの違いがわかればその疑問も解決すると思うのだが

713:デフォルトの名無しさん
07/11/29 12:43:16
>>709
>なぜBitBltではDIBではなくhDCを渡すのでしょうか。

BitBltはDIB用じゃないからさ
DIBを直接渡すAPIはSetDIBitsToDeviceやStretchDIBitsがあるからそっちを使う

>DIB間での画像拡大コピーってできますか?

ポインタ駆使して直接ビットデータを操作しちゃえばなんだって出来る

714:デフォルトの名無しさん
07/11/29 12:49:00
>>709
GDI+でも使ってろ

715:デフォルトの名無しさん
07/11/29 14:03:10
>>700
本来は
void correct_free(void **p){
old_free(*p);
*p = NULL;
}
という設計にすべきだったんだよな

そうなってはじめて安心して
correct_free(&lpPoint);
correct_free(&lpPoint);
と書ける


716:デフォルトの名無しさん
07/11/29 14:06:23
その安心は半分まやかしだ
ポインタ値はあちこちにコピーされうる

717:デフォルトの名無しさん
07/11/29 14:13:31
生成者と参照者を明確に区別して
freeは生成者だけが行うようにする
参照者は使ったらそのまま放置
っていう造りにしたら安定する?

718:デフォルトの名無しさん
07/11/29 14:14:26
そんなあなたにshared_ptr

719:デフォルトの名無しさん
07/11/29 14:36:20
>>715
correct_free(NULL);
どこが安心できるんだ?

720:デフォルトの名無しさん
07/11/29 15:14:31
私が知っていること(onXP)

ビットマップにはDDB,DIB,DIBSectionがある
HDCが好むのはHBITMAPつまりDDBとDIBSection
DDBはシステム領域に作られ、総量の上限がある
DIBSectionはプロセス毎の2GBの中に作られる
-->長時間保持する大きなビットマップ向き、メモリマップを使えば巨大なものも可

DIBSectionを選択したままCreateCompatibleBitmapを呼ぶとDIBSectionが作られるらしい
DIBSectionはwin16のDIB.DRV,WinGの系統らしい
DDBとDIBSection win95の頃は速度大差なし

721:デフォルトの名無しさん
07/11/29 15:24:23
>>719
ごめんうっかりしてた
void correct_free(void **p){
if(*p) old_free(*p);
*p = NULL;
}
correct_free(&lpPoint);
correct_free(&lpPoint);

722:デフォルトの名無しさん
07/11/29 15:29:19
頑張ってそんな変なもの使って何かいいことある?
free には失敗しないかもしれないけど、
何時誰が free するかを管理しないコーディングスタイルじゃ
内容が必要なときに既に free されてる恐れがあるじゃん。

ちゃんと誰がいつまで内容を参照したいかが分かってれば、
それの終わりのとこで一回 free すればいいわけだし。

723:デフォルトの名無しさん
07/11/29 15:57:27
>>708
アセンブリでMMXやSSEで使うこのご時世に
お前が低能だって事は分かった

724:デフォルトの名無しさん
07/11/29 16:26:48
>>721
if(*p)
{
old_free(*p);
*p = NULL;
}
こうだろ

>>722
バカは黙ってろ
管理するに決まってるだろ
俺はマクロでNULL代入してるぞ

725:724
07/11/29 16:28:36
訂正
if(p)
{
old_free(*p);
*p = NULL;
}

726:デフォルトの名無しさん
07/11/29 16:30:04
ダイレクト ボブサップ

727:デフォルトの名無しさん
07/11/29 16:32:44
>>722
今時は開放されたメモリの参照すれば例外飛んでくれるから
NULL入れる必要もないといえば無い。
それに、確保や開放を頻繁に行うなら、意識して717のいうように作るべきだと思う。

しかし、世の中の大多数の人はそのことを知らないし、やろうともしない。
結局バグの温床になっているが、なんとなく動いてしまっていて気がつかない人も多い。
特にリリース版で動くからいいやとかいうタイプの人もいるんで・・・

あと、自分の経験上、他人が書いたコードで確保と開放が入り乱れてる場合は
開放したところにNULLいれるように書き直すと、バグが良く見つかる。
まあ、こんな小手先の技使わないといけない俺の環境が悪いんだろうな。

最新のコンパイラとか開発環境、動作環境でやり、自分がコードのすべてを把握し
覚えている限りは無用のテクニックかもしれない。

>>723
最適化スレだったらその発言は甘んじて受け入れよう
だが、ここはAPIを質問するところだ
こんなところで、パイプラインの破壊気にしてもしょうがないだろ?


728:デフォルトの名無しさん
07/11/29 16:34:44
>>727
C++ならいいんだけどな

729:デフォルトの名無しさん
07/11/29 16:37:05
あああ、free論議は収拾付かなくなるので終了。

終了終了

730:デフォルトの名無しさん
07/11/29 16:38:34
>開放したところにNULLいれるように書き直すと、バグが良く見つかる。
嘘だろ

731:デフォルトの名無しさん
07/11/29 16:47:32
>>727
APIスレだろうが最適化スレだろうが関係ない
何万回、何百万回も使うならif文一つだろうが気にするべき
ジャンプ1回で済ますかpush、call、popを使うかで大違い

732:デフォルトの名無しさん
07/11/29 16:48:24
>>728
少なからず理解者がいてくれたようでうれしい

>>730
嘘だと思える君の環境がすごくうらやましい
世の中には信じられないことをする人が多いのです。
また、C++に対応してるんだかしてないんだかわからない
しょぼい環境も多いのです。

733:デフォルトの名無しさん
07/11/29 16:52:09
>>732
開放したところにNULLいれてバグるなら
NULLいれなくてもバグるだろ

734:デフォルトの名無しさん
07/11/29 16:53:41
>>732
お前が低能だって事は分かった

735:デフォルトの名無しさん
07/11/29 17:02:35
>>727
そんなことで例外発生させてどうすんだよ
NULLなら処理を跳ばしてくれれば良いだけなのに

736:デフォルトの名無しさん
07/11/29 17:05:47
>>733
NULLいれなくてもバグってるんだけどそれは発見されない、
NULLいれたらそのバグが発見されやすい、ってことだろ

737:デフォルトの名無しさん
07/11/29 17:08:32
>>736
元々バグってんのか
NULL代入関係ないじゃん

738:デフォルトの名無しさん
07/11/29 17:10:49
ここはAPIスレだったよね?
特定の言語の話はスレ違い

739:デフォルトの名無しさん
07/11/29 17:11:40
ガベコレのある言語を使いましょう

でこの話題は終了

↓はい次

740:デフォルトの名無しさん
07/11/29 17:14:53
空気読まずに
ポインタのアドレス使ったリスト管理なんかだと
freeのあとNULL入れるのは必要になってくるけどな

741:デフォルトの名無しさん
07/11/29 17:16:09
haskellお勧め

742:デフォルトの名無しさん
07/11/29 17:21:43
質問なのですが、
SetLayeredWindowAttributesを使わずにウインドウのある色の部分だけ透明にすることはできるのでしょうか?

743:デフォルトの名無しさん
07/11/29 17:22:31
SetWindowRgn

744:デフォルトの名無しさん
07/11/29 17:31:33
>>727
> 開放したところにNULLいれるように書き直すと、バグが良く見つかる。
ワロタ

745:デフォルトの名無しさん
07/11/29 18:14:14
結局
if( p != NULL ) { free(p); p = NULL; }
でFA?

746:デフォルトの名無しさん
07/11/29 18:15:12
どうでもいいです

747:デフォルトの名無しさん
07/11/29 19:04:14
>>745
>>696-698

748:デフォルトの名無しさん
07/11/29 19:11:42
ぬるぽ


749:デフォルトの名無しさん
07/11/29 19:12:49
if(_x_){ _x_->Release(); _x_ = NULL; }

750:デフォルトの名無しさん
07/11/29 19:21:24
スマートポインタ使えよ糞共

751:デフォルトの名無しさん
07/11/29 19:25:54
templateって方の種類分容量増えるんだろ
define でいいじゃん

752:デフォルトの名無しさん
07/11/29 19:27:28
>>751

753:デフォルトの名無しさん
07/11/29 19:32:49
>>751
確かに環境によってはtemplate禁止にせざるを得ないこともある。
が、さすがにtemplateの機能をdefineだけじゃ無理だと思う。

754:デフォルトの名無しさん
07/11/29 19:44:57
本当の初心者質問ですみません。
ウインドウを作成するところで詰まってしまいました。
ビルドは成功するのですが、実行するとウインドウが表示されず、CPUが100%になります。
どこがおかしいでしょうか?

環境
WindowsXPsp2
Visual Studio2005

ソース
URLリンク(kansai2channeler.hp.infoseek.co.jp)

755:デフォルトの名無しさん
07/11/29 19:48:39
ウィンドウクラスの登録が抜けている

756:デフォルトの名無しさん
07/11/29 19:55:50
>>854
PeekMessageなんか使うから100%になるんだ、GetMessage使え。
まずは猫でも分かる〜を読むべし。

757:デフォルトの名無しさん
07/11/29 19:58:51
>>752

758:デフォルトの名無しさん
07/11/29 20:02:59
>>717
>>727

COMのプログラミングすると
生成者が放置で
参照者が片付ける
みたいな感覚に染まってしまう


759:デフォルトの名無しさん
07/11/29 20:07:30
>>725
それ意味なくね?
訂正が間違ってる


760:デフォルトの名無しさん
07/11/29 20:59:53
InvalidateRectで無効化された領域を取得するにはどうすればよいのでしょうか?

質問の背景としては、スクロールバーを動かしたとき、画面のビットマップをBitBltで
移動させることでスクロールされるようにしています。ところが、転送元の領域が
無効化された状態であった時、その領域が転送後にも再描画されず、不正な状態のままに
なってしまっています。そこで、転送前に無効化されていた領域を転送後の座標系で
無効化しなおすことでこの問題を解決したいと思っているのですが。

よろしくお願いします。

761:デフォルトの名無しさん
07/11/29 21:03:32
>>751
組み込みスレならともかく、Win32 APIスレで言う話か?
メモリ数百MiB-数GiB、CPU数百MHz-数GHzな環境で禁止にする必要などない。


762:デフォルトの名無しさん
07/11/29 21:07:40
>>760
GetClipBox
PAINTSTRUCT::rcPaint

763:デフォルトの名無しさん
07/11/29 21:08:29
GetUpdateRect
だけど。
ふつうはScrollWindowExが良きに計らってくれるんじゃないのかなー。

764:760
07/11/29 21:16:46
>>763
おわっと、こんな関数があるとは知りませんでした。
まだ試してないですが、これを使えば万事うまくいきそうですね。
どうもありがとうございます。

>>762
どうもありがとうございます。

765:デフォルトの名無しさん
07/11/29 22:32:51
>>759
どこが?

766:デフォルトの名無しさん
07/11/29 23:00:00
もう引っ張るなよ

767:デフォルトの名無しさん
07/11/29 23:03:31
別にfreeの話しを引っ張るつもりはない
しかし突っ込まずにはいられないだろ

768:デフォルトの名無しさん
07/11/29 23:04:35
「あえていうなら、Win32APIスレでfreeの話をする辺りが。」
ってことで納得してくれよ(w

769:デフォルトの名無しさん
07/11/29 23:05:44
だからfreeは関係ないと

770:デフォルトの名無しさん
07/11/29 23:07:43
>>759>>766


771:デフォルトの名無しさん
07/11/29 23:10:46
freeは本質とはあまり関係ないんだからとりあえず黙っとこうぜ。
荒らしたいというなら別だが。

772:デフォルトの名無しさん
07/11/29 23:13:29
>>771
>>769
コードの話しだろ

773:デフォルトの名無しさん
07/11/29 23:15:15
馬鹿しか居ないな

774:デフォルトの名無しさん
07/11/29 23:18:55
以上をまとめると、HeapDestroy万歳ってことですね。

775:デフォルトの名無しさん
07/11/29 23:25:40
>>772
>>725はあってるよ
どの道すれ違い消えろ

776:デフォルトの名無しさん
07/11/30 00:12:10
昨日はサウンド関係で荒れて今日はfreeで荒れるのか
明日は何の話題で荒れるのかな〜?

777:デフォルトの名無しさん
07/11/30 00:18:14
1:int *p;とint* p;
2:sizeof( char )
3:インデント
好きなのを選べ

778:デフォルトの名無しさん
07/11/30 00:24:36
>>777
1 と 3 はコード整形ツールで抹殺されるから 2 しかない!

779:デフォルトの名無しさん
07/11/30 00:35:00
ウィンドウのシステムバーの青い部分をドラッグしたときにくるメッセージって何ですか?
WM_ENTER/EXITMENULOOPは左上のボタンで出るメニューのメッセージっぽいのですが…

780:デフォルトの名無しさん
07/11/30 00:47:13
WM_SYSCOMMAND
WM_WINDOWPOSCHANGING
WM_WINDOWPOSCHANGED
WM_MOVING
WM_MOVE

781:デフォルトの名無しさん
07/11/30 00:47:54
>>778
Win32API的にsizeof (TCHAR)を使うので、このスレでは2すら話題にならない。

782:デフォルトの名無しさん
07/11/30 00:48:14
結局見つけました
WM_ENTER/EXITSIZEMOVEでした。
お騒がせしました

783:デフォルトの名無しさん
07/11/30 00:52:10
CHARとかWCHARとかTCHARとか型がありすぎてわけわかんね
文字列に関してはワールドワイドなUnicodeに対応してるWCHARだけつかってればいいってこと?

784:デフォルトの名無しさん
07/11/30 00:52:46
いまさらハンガリアン記法でひとつ。

785:デフォルトの名無しさん
07/11/30 00:55:32
もうNT系しか相手にしないなら、VC8みたいにいきなりUNICODE定義しといて
WCHARしか使わないという手はある。
外部入出力で結局charが要るのと、
文字列リテラルにL付け忘れることがあるのと
UNCODE特有の嫌らしい概念が出てくるのが
今ひとつだけど。

786:デフォルトの名無しさん
07/11/30 01:09:11
数は少ないがANSI版しか用意されていない糞APIもあるけどな

787:デフォルトの名無しさん
07/11/30 01:09:58
>外部入出力で結局charが要るのと

このときのcharで使う文字コードは何がよいのでしょうか?
UTF-8?
mbcs?


788:デフォルトの名無しさん
07/11/30 01:11:29
外部次第だろ

789:デフォルトの名無しさん
07/11/30 01:20:54
質問ですが、画面の解像度が変化したときに受け取るイベントというのは何なのでしょうか?

790:デフォルトの名無しさん
07/11/30 01:22:36
あるよ
ググればすぐ出てくる

791:デフォルトの名無しさん
07/11/30 02:10:24
ココ見てると、みんな同じような問題で悩んでんだなってチョット思うな。
特にDIBSectionとかDIBとかDDBとか 、答えられる香具師があんまりいないんだな。
DIBセクションはDIB?をれともDDB?

792:デフォルトの名無しさん
07/11/30 02:10:38
WM_KAIZOUDOHENKA

793:デフォルトの名無しさん
07/11/30 02:17:17
>>791
DIBセクションはDIBセクションだろw
CreateDIBSection によって作成された HBITMAP 互換のGDIオブジェクト。
GetObject すると DIBSection が帰る。

794:デフォルトの名無しさん
07/11/30 02:30:32
>791
答え待ってないでProgramming Windows下巻読めよ

795:デフォルトの名無しさん
07/11/30 03:25:30
MSのドキュメント読めばわかる程度のことは答えんな。
調べる事が下手糞だといつまでたってもスキルは上がらんぞ。

796:デフォルトの名無しさん
07/11/30 03:37:08
DIBSection = DIB の部分
つまりDIBの一部分ってことでFA

797:デフォルトの名無しさん
07/11/30 03:45:56
>>796
>>791のようなDIBとDDBの区別すらついてない人間にはその説明では不十分だ
結局はMSDN読め、に尽きるが

798:デフォルトの名無しさん
07/11/30 04:17:46
香具師なんて使ってる奴久しぶりにみたwww

799:デフォルトの名無しさん
07/11/30 05:54:26
その内「w

800:デフォルトの名無しさん
07/11/30 05:55:07
失敗。
まぁいいや。
800ゲッツ!

801:デフォルトの名無しさん
07/11/30 07:15:09
>>786
そりゃWin16との互換専用だったりして
Unicode版用意してまで延命させる必要がそもそもない

802:デフォルトの名無しさん
07/11/30 07:32:23
GetProcAddressはー?

803:デフォルトの名無しさん
07/11/30 08:35:46
DLLの仕様でシンボルにANSI文字列しか使えないから


804:デフォルトの名無しさん
07/11/30 08:41:01
切れちゃった

DLLの仕様でシンボルにANSI文字列しか使えないからANSIでないと意味がない
無理してUNICODEにしてもANSIに変換してオーバーヘッドが出るだけ

805:デフォルトの名無しさん
07/11/30 10:16:43
ATLのW2Aとかの文字列変換マクロを使えるなら、オーバーヘッドは最小になるよ。
自分の場合、内部はUNICODEで処理するなぁ。

806:デフォルトの名無しさん
07/11/30 11:06:06
CreateWindowで作ったウィンドウの子コントロールのフォントを変更したい場合
親ウィンドウに合わせて自動で全ての子のフォントを変更することはできないのでしょうか
それともこういった処理は自分で書く必要があるんでしょうか

807:デフォルトの名無しさん
07/11/30 11:42:00
もちろん、自分でやらないと駄目。
自動で勝手にフォント変更されたら、コントロール毎にフォントを変えることが
できないではないか。

808:デフォルトの名無しさん
07/11/30 12:48:46
>>801
違うよImageHlpだよ
ま、こんなモン使う機会あまりないけどな

809:デフォルトの名無しさん
07/11/30 12:55:46
>>807
やはりそうなんですか
ありがとうございました

810:デフォルトの名無しさん
07/11/30 13:44:40
>>808
Platform SDKを良く読んだほうが良い

811:デフォルトの名無しさん
07/11/30 14:10:35
>>810
よく読むべきなのはお前な
BindImage
ReBaseImage
ImageLoad

> All ImageHlp functions, such as this one, are single threaded.
今時こんな設計の糞API揃いだが


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4225日前に更新/231 KB
担当:undef