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

Win32API質問箱 Build91

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/11/08(月) 02:01:42
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやHなお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!

■過去スレ
Win32API質問箱 Build90
http://hibari.2ch.net/test/read.cgi/tech/1287205063/

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

- Win32API質問箱 wiki
http://wiki.livedoor.jp/program1/d/FrontPage

過去スレはwikiから探してください。
0175デフォルトの名無しさん2010/11/13(土) 21:08:13
>>174
いや、Releaseビルドですよ。Win7というのが関係しているのかもしれません
0176デフォルトの名無しさん2010/11/13(土) 21:10:44
おおかたエクセルコントロールから1件ずつ削除でもしてるんだろう
0177デフォルトの名無しさん2010/11/13(土) 21:31:24
おまっ、どうすんだよこれ
http://codepad.org/MUwPe4oA
0178デフォルトの名無しさん2010/11/13(土) 21:31:25
常識的に考えてコンストラクタが1u以下であれるべきる
0179デフォルトの名無しさん2010/11/13(土) 21:33:23
わんわんお?
0180デフォルトの名無しさん2010/11/13(土) 21:37:09
エッチなまうまう?
01811612010/11/13(土) 21:39:41
ちょwwwww
FatalAppExit使い勝手いいわwwww
>>165超GJ
0182デフォルトの名無しさん2010/11/13(土) 21:42:13
こんなの常用すべきもんじゃないよ
01831612010/11/13(土) 21:44:06
>>182
メモリ確保失敗とかで終了させるときに使おうと思ってたんだがダメなのか?
0184デフォルトの名無しさん2010/11/13(土) 22:04:51
ほかの方法で終了できない場合にだけ、アプリケーションは FatalAppExit 関数を呼び出します。
FatalAppExit 関数は、常にアプリケーションが使用したメモリを解放したり、ファイルを閉じるとはかぎりません。
Windows の一般エラーの原因になることもあります。アプリケーションで予期しないエラーが発生した場合は、
このアプリケーションが使用するメモリをすべて解放し、メインメッセージループから戻って終了するようにします。
0185デフォルトの名無しさん2010/11/13(土) 22:08:38
メモリー確保の失敗とか起こるような状況下で何ができるのかいまだに想像もつかないな・・・再現できないからデバッグもできないし
でも2GB確保しようとして足りなくて失敗したとかなら正常終了に持ち込んだ方がいい
01861612010/11/13(土) 22:15:31
>>184-185
じゃあハンドルとかメモリを全部開放した上でWM_CLOSEとかでおk?
0187デフォルトの名無しさん2010/11/13(土) 22:43:35
特に問題なければDestoryWindowだな。1/0で落とす方法もあるけど、こっちも非常用だな。
0188デフォルトの名無しさん2010/11/14(日) 02:15:59
*(char *)0 = 0;
0189デフォルトの名無しさん2010/11/14(日) 02:20:29
>>185
俺も普通の new で起きる bad_alloc なんかは、チェックすらしてない。
巨大なファイルをメモリにマップするとか、VirtualAllocで数百MBのメモリを
確保するとかだったらチェックするけど。
0190デフォルトの名無しさん2010/11/14(日) 02:27:20
>>184
日本語MSDNなんか引用すんな。低能。

Remarks
An application calls FatalAppExit only when it is not capable of
terminating any other way.
0191デフォルトの名無しさん2010/11/14(日) 03:08:14
>>184
>FatalAppExit 関数は、常にアプリケーションが使用したメモリを解放したり、ファイルを閉じるとはかぎりません。
他のプロセスが参照カウンタを増やしているとか、そういうオチだね。
何の問題も無い。
0192デフォルトの名無しさん2010/11/14(日) 03:28:14
どんなやり方であれ、プロセスが終了すればそのプロセスが使用していた資源は
全て解放される。これジャングルの掟。
0193デフォルトの名無しさん2010/11/14(日) 03:44:15
>>192

>>184はそれも怪しいって言ってるんじゃないかい
プロセスの正常な終了手続き取らないとか
0194デフォルトの名無しさん2010/11/14(日) 07:55:42
>>193
英語版(>>190)にはそんな事は書いていない。日本語版(>>184)が嘘。
低能はプログラミングすんな。
01951612010/11/14(日) 08:44:26
メモリ確保に失敗するような状況だからのんびりハンドル閉じたりしてないで
さっさとプログラム終了させなきゃいけないのかと思ってたんだがそうでもないのか?
0196デフォルトの名無しさん2010/11/14(日) 09:23:21
delete/->Dispose/->Release
CloseHandle
DestroyWindow
PostQuitMessage
ExitProcess
このあたりが全部失敗するような状況のことじゃないか?
0197デフォルトの名無しさん2010/11/14(日) 10:50:06
Dllファイルの読み込みで質問です。
今は普通にLoadLibraryで読み込んでるんですが、
ファイルからの読み込みしか対応してないようです。
これをメモリから読み込むようにできませんか?

今はこのようになってるんですが、
スクリーンセーバーなのでファイルをまとめたいんです。
urara.scr スクリーンセーバー
imgloader.dll 画像ローダー
voiloader.dll 音声ローダー

Bitmapなどの素材はリソースにおけるんで、
urara.scrの中に格納できたんですが、
imgloader.dllなどは格納はできるんですが、
LoadLibraryはリソースに対応してないようです。
0198デフォルトの名無しさん2010/11/14(日) 12:01:05
「ですが、」の多用で意味不明ですが、
LoadLibraryはリソースに対応してるようですが、
対応していないと思う理由を考えてみたのですが、
やはり意味不明ですね。
0199デフォルトの名無しさん2010/11/14(日) 14:52:38
SHBrowseForFolderでMAX_PATHを超える長さの
パスって取得できないのかな・・・
0200デフォルトの名無しさん2010/11/14(日) 14:58:46
>>197
ttp://ruffnex.oc.to/kenji/text/load_dll/
ここ読めば出来るような気がする
0201デフォルトの名無しさん2010/11/14(日) 15:25:18
>>198
すいませんプログラマ夜逃げで焦ってました。

>>200
ありがとうございます参考になりました。
0202デフォルトの名無しさん2010/11/14(日) 17:10:38
>>194
http://msdn.microsoft.com/en-us/library/ms679338%28v=VS.85%29.aspx
This function should only be used as a last resort,because it may not free the memory or files owned by the application.

書いていない=解放される、ではないよ
MSの場合は書いてあっても信用できないけどねw
0203デフォルトの名無しさん2010/11/14(日) 17:40:18
Visual Studio 2010 Expressで
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win13.html
にあるやつエラーになるんですがどうしてですか?

win32api.c(14): error C2065: 'LlpcsWnd' : 定義されていない識別子です。
win32api.c(14): error C2223: '->lpszName' : 左側が構造体か共用体に対するポインターではありません。
win32api.c(14): warning C4047: '関数' : 間接参照のレベルが 'LPCWSTR' と 'long' で異なっています。
win32api.c(14): warning C4024: 'MessageBoxW' : の型が 3 の仮引数および実引数と異なります。
win32api.c(14): error C2198: 'MessageBoxW' : 呼び出しに対する引数が少なすぎます。
0204デフォルトの名無しさん2010/11/14(日) 17:44:58
>>203
BCC使ってるけどコピペで問題なかった。
もっかい見直したら?
0205デフォルトの名無しさん2010/11/14(日) 17:51:59
マジレスするとそのサイトの内容が古いからそれで勉強するのはやめとけ。
Unicodeビルドやめてマルチバイトにすればビルドは通るだろうが、
今時そういうことをするのはちょっと。
0206デフォルトの名無しさん2010/11/14(日) 18:03:22
>>200
横からだけど出来ました
ありがとうございました
0207デフォルトの名無しさん2010/11/14(日) 18:05:15
>>204
BCCでできました。報告ありがとうございます
>>205
やはりサイトではなく本を買ったほうがいいでしょうか?
0208デフォルトの名無しさん2010/11/14(日) 18:05:19
>>203
エラー出ないように書き直すと勉強になるよ
0209デフォルトの名無しさん2010/11/14(日) 18:08:52
>>197 >>200
これ結構楽しいな
ウィルススキャンにも引っかからなかった
0210デフォルトの名無しさん2010/11/14(日) 18:17:16
つーか_tWinMain()にはなってないけど、TEXTマクロは使ってるんだな
ビルド通らないって入力ミスかなんかじゃないのか
0211デフォルトの名無しさん2010/11/14(日) 18:17:37
>>207
MessageBoxWって書いてあるのに気づかなかったとか死にてぇ・・・・・・
本は2004年5月の出版。7年ほど前の本だがどうするよ?
0212デフォルトの名無しさん2010/11/14(日) 18:17:58
と思ったら

> TEXT(lpcsWnd->lpszName)

これはねーわ(;´Д`)
0213デフォルトの名無しさん2010/11/14(日) 18:18:03
捨てる
0214デフォルトの名無しさん2010/11/14(日) 18:23:02
>>212
ここはどうするべきなんでしょうか?
0215デフォルトの名無しさん2010/11/14(日) 18:27:57
TEXTマクロに変数いれてるやつなんて初めて見た
素直に渡せよ
0216デフォルトの名無しさん2010/11/14(日) 18:28:08
TEXT()がいらない。
lpcsWnd->lpszNameにすればコンパイルは通ると思われる。
TranslateMessage()呼んでなかったりとかいろいろとアレなサンプルだな・・・
0217デフォルトの名無しさん2010/11/14(日) 18:31:42
>>215-216
ありがとうございます
>>211
ちょっと新しい本見つけて買おうと思います
0218デフォルトの名無しさん2010/11/14(日) 18:34:20
そういえば猫でもわかるWin(ryって第三版まで出てるみたいだけどけっこう良書?
0219デフォルトの名無しさん2010/11/14(日) 18:39:34
判断は何に価値を置くかで異なる。
まずは自分の価値基準を提示しろ。
0220デフォルトの名無しさん2010/11/14(日) 18:51:52
>>219
プログラムの本はあんま買わないからわからん
サイトなら入門のころお世話になった苦Cがけっこう良かった、と思う
0221デフォルトの名無しさん2010/11/14(日) 18:53:16
管理人の性格が微妙なやつか
0222デフォルトの名無しさん2010/11/14(日) 20:24:38
>>218
IDEに頼ってないところだけは評価してもいい
0223デフォルトの名無しさん2010/11/14(日) 20:38:23
定期あげ
0224デフォルトの名無しさん2010/11/14(日) 22:47:26
擬似ハンドルをDuplicateさせるのって
鏡をカメラで撮って写真にする感じだよー って一言説明あれば
分かりやすいのになー
0225デフォルトの名無しさん2010/11/14(日) 23:04:58
ポインタとかハンドルをたとえ話で説明する入門書は例外なく糞。
ポインタを単にポインタとして理解できない初心者は門前払いすべし。
0226デフォルトの名無しさん2010/11/14(日) 23:08:32
>>225
最近理解できたんだね。良かった良かった
0227デフォルトの名無しさん2010/11/14(日) 23:16:04
世界はポインタを隠蔽化する方向に向かっている^ object;
0228デフォルトの名無しさん2010/11/14(日) 23:29:29
Win32APIスレで何気取ったこと言ってるんだ?
0229デフォルトの名無しさん2010/11/14(日) 23:31:37
別に隠す必要ないのにね
ちゃんとコンピューター勉強したい人にとっては妨げになるだけ
0230デフォルトの名無しさん2010/11/15(月) 00:23:42
>>228
Win32APIスレで何気取ったこと言ってるんだ?
0231デフォルトの名無しさん2010/11/15(月) 04:37:09
定期あげ
0232デフォルトの名無しさん2010/11/15(月) 06:38:49
どれだけ隠蔽しても人はヌルポから逃れられないのさ
0233デフォルトの名無しさん2010/11/15(月) 07:27:47
はいはいぬるぽぬるぽ
0234デフォルトの名無しさん2010/11/15(月) 19:24:16
定期あげ
0235デフォルトの名無しさん2010/11/15(月) 22:08:23
赤鬼さんと朝まで豆まき
0236デフォルトの名無しさん2010/11/16(火) 09:18:15
定期あげ
0237デフォルトの名無しさん2010/11/16(火) 19:31:56
定期あげ
0238デフォルトの名無しさん2010/11/16(火) 19:37:42

FormatMessageWでHRESULTの説明を取得しようとしたら
↓の読み込み専用のなんとかエラーが出るんだけどどうすればいい


(裏) [一本道] 真中ゆり&大城楓 ペロリンピックpart1 エッチなスケートリンク (パイパン・レズ) [無修正] (704x396 Mpeg4v2 2820Kbps 29.97fps 128Kbps 48KHz J-Stereo 1h01m31s).avi
0239デフォルトの名無しさん2010/11/16(火) 19:41:11
>>238
PCをリカバリー
0240デフォルトの名無しさん2010/11/16(火) 19:49:51
cygwinスレのパロディか、つまらん
0241デフォルトの名無しさん2010/11/16(火) 19:51:21
>>238
zipでくれ
02422382010/11/16(火) 19:56:57
すいません。間違えて変な物をコピペしてしまいました…
>>238は見なかったことにして下さい。
0243デフォルトの名無しさん2010/11/16(火) 20:02:30
>>240
元は面白いの?
0244デフォルトの名無しさん2010/11/16(火) 20:10:45
>>243
同じぐらいつまらん
昨日あたりに、関係ないスレにコピペされまくってたが
0245デフォルトの名無しさん2010/11/16(火) 20:23:13
クリップボードは一つだからな
0246デフォルトの名無しさん2010/11/16(火) 21:15:08
グローバルクリップボード
0247デフォルトの名無しさん2010/11/16(火) 22:34:18
質問です。
既存のDIBからDDBを生成する方法ないでしょうか。
(DDBを生成した後もDIBとして使用可能なもの)

DIBSectionは既存のDIBを使用できないし、CreateDIBitmapは
DDBを生成した後は元のDIBとは別メモリが割り当てられてしまいます。
0248デフォルトの名無しさん2010/11/16(火) 22:44:01
>DIBSectionは既存のDIBを使用できない
0249デフォルトの名無しさん2010/11/16(火) 22:45:32
DIBSection一択だろ
0250デフォルトの名無しさん2010/11/16(火) 22:47:49
>>248
たぶん1度DIB作ってから再度作るのが面倒くさいから
誰か僕ちゃんにおあつらえ向きの関数知りませんか〜ってことだと思うで
02512472010/11/16(火) 23:40:44
unsigned intの配列を任意のタイミングでDIBにしてGDIで操作したいんです。
かつ、速度が必要なαブレンド等のピクセル操作はメモリアクセスで済ませたい。
この為、unsigned intの配列とDIBがシームレスに直結してる必要があります。
さらに、GDI操作が必要なくなったらHBITMAPは解放したいです。
(この際unsigned intの配列は解放されてはいけない)
そしてまた必要なときにDIBを生成というサイクルを想定しています。
02522472010/11/16(火) 23:44:21
すみません誤記です
x DIB
o DDB
0253デフォルトの名無しさん2010/11/16(火) 23:48:03
unsigned intの配列の代わりに、
DIBセクションで確保されたメモリを使えば解決だな。
この状態で直接メモリアクセスできるから、
わざわざ解放する理由も無くなるし。
0254デフォルトの名無しさん2010/11/16(火) 23:49:57
たしかCreateDIBSectionはファイルマッピングハンドルを指定できなかったか?
使ったことないが
02552472010/11/16(火) 23:54:20
>>253
Win95で動かす場合、リソースに64k個制限があるため不要なDIBセクションの
生成は控えたいのです。
(ゲーム用途に使用する場合細かい画像を大量に取り扱う事があってリソースを圧迫してしまいます)
そのため、通常は配列で画像処理を行い、必要なときのみアダプタ的なイメージで
配列にかぶせGDIで描画を行いたいという背景があり、最初からDIBセクションを使用する事ができません。
それでこの質問をするに至りました。
02562472010/11/16(火) 23:58:54
>>254
ありがとうございます。調べてみます。
0257デフォルトの名無しさん2010/11/17(水) 00:28:56
Windows95になんか対応するな。むしろ排除しろ。
0258デフォルトの名無しさん2010/11/17(水) 00:35:59
今のPCの性能でWin9xの動作環境を用意できるという前提なら、
最終的に画面に出力する処理以外は、一切GDIは不要だな。
よって、リソースの個数制限に悩まされる事は全く無いな。
PentiumIII/Athlon以前の環境なら、多少検討する価値があるかもしれないが。
0259デフォルトの名無しさん2010/11/17(水) 00:43:22
いいからAPI出せや
0260デフォルトの名無しさん2010/11/17(水) 00:56:58
つ EnumDateFormatsExEx
0261デフォルトの名無しさん2010/11/17(水) 01:04:54
何かをトレードオフしないと厳しそうだな。
メモリが足りなかったら処理速度でまかなうとか。
処理速度上げるために別に計算してテーブルにするとか。

描画時だけ妥協してCreateDIBitmapあたりでHBITMAPにしてそれ以外は配列で何とかすればいいと思うけど。
あと、処理速度が遅いときの基本の描画はダーティレクトだと思う。異論は認める。

あ、思い出した。SetDIBitsToDeviceっていう描画関数もあるよ。
0262デフォルトの名無しさん2010/11/17(水) 01:42:24
SetPixel
0263デフォルトの名無しさん2010/11/17(水) 02:28:14
DirectDrawを使えば良い。
0264デフォルトの名無しさん2010/11/17(水) 02:33:13
SetPixel==Sex
02652612010/11/17(水) 10:08:13
暇だからサンプル書いてみた。win7+vc10
ttp://www1.axfc.net/uploader/File/so/54256.zip

DIBの8bitデータなのは別に何かの制約ではなく、データ作るの楽だから。
できれば、こんな感じのデータはクラスにして使ったほうが色々便利でいいと思う。
基本的に生データをさらしておくのはお勧めしない。

あと、これvc10のプロジェクト作成ウィザードで吐いたやつのWndProcだけ変更したやつだから要点はWindProcに集約されてるよ。
描画関数はMSDNで伸ばすほう伸ばさないほうの両方の互換性がWin95になってたから大丈夫だと思うんだけど・・・。
0266デフォルトの名無しさん2010/11/17(水) 10:44:22
「〜てみた」
0267デフォルトの名無しさん2010/11/17(水) 10:50:37
民主党
0268デフォルトの名無しさん2010/11/17(水) 11:04:57
奴らは言うだけで実行しないから
0269デフォルトの名無しさん2010/11/17(水) 11:09:50
メッセンジャーでメール受信したときに右下に出てくるウィンドウみたいなのを出す
サンプルコードみたいなのないでしょうか?
0270デフォルトの名無しさん2010/11/17(水) 11:22:11
ggr
ttp://d.hatena.ne.jp/kiwamaru/20090121/1232524352

最近はばるーんちっぷすっていうみたいだな。
0271デフォルトの名無しさん2010/11/17(水) 11:56:04
ありがとうございます
0272デフォルトの名無しさん2010/11/17(水) 12:22:53
↓サドルマン
0273デフォルトの名無しさん2010/11/17(水) 13:21:15
>>265
ハゲですねわかります
02742612010/11/17(水) 16:34:37
>>273
正解。
って俺はハゲじゃねー。まー、うまく動いてるなら問題ないんだがね。
0275デフォルトの名無しさん2010/11/17(水) 16:53:13
>>265
mingw32 3.4.4 (結構古い) の g++/ld でコンパイル/リンクしたのですが no problem でした
■ このスレッドは過去ログ倉庫に格納されています