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


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

Win32API質問箱 Build65



1 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:51:24 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

過去スレ、関連リンクは>>2-10くらい。

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

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

Win32API質問箱 Build64
pc11.2ch.net/test/read.cgi/tech/1207099291/

202 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 21:26:36 ]
WinInetには非同期モードあるぞ、一応。

203 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 21:33:35 ]
DLLでエクスポートされたデータ変数について、
ちょっとお聞きしたいことがあります。

例えば、変数をエクスポートする際
 __declspec(dllexport) int *dll_val;
と宣言すれば、メイン側からこの変数は
 __declspec(dllimport) int **_imp__dll_val = &dll_val;
と同じように扱われると、最近msdnで知りました。
なので、メイン側からのこの変数への参照が、アセンブラレベルでは
 DWORD PTR [_imp__dll_val]
のようになると予想していました。

VC2005のデバッグモードでは、確かにそうなっていました。
しかし、リリースモードでは、なぜかそうなっていませんでした。
これに対応する個所が
 offset _imp__dll_val
のように書き換えられていたのです。

これを行うためには、_imp__dll_valのアドレスが事前に決まってなければならないと思うのですが、
ベースアドレスが固定のwindows dllで、このようなことは可能なのでしょうか?

204 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 21:51:41 ]
リロケート情報あるんじゃないのかな

205 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:01:45 ]
ベースアドレス固定ってntdllとkernel32ぐらいじゃね?(Vistaは知らん)

206 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:46:14 ]
>>191
おそらくは各ドライバ(ntfs.sysとかかな)のFastI/Oディスパッチルーチンの呼び出し

_FAST_IO_DISPATCH構造体でぐぐれば情報はでる あくまで推測だけど


207 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:10:38 ]
>>204
dllでリロケートする場合って、必要な全アドレスを書き換えますよね。
この場合、間接ポインタではなく'offset _imp__dll_val'で変数を使うことは可能なのでしょうか?

>>205
すいません。ベースアドレス固定ではなく、
「dllごとにベースアドレス固定」が正しい表現でした。

208 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:26:48 ]
ねぇ、もうWinFXみたいなのって作らないの?

209 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:29:19 ]
WinFXって.NET3.0だろ

210 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:34:25 ]
既に完成したものをまた作ってどうすんだろうね



211 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 00:06:16 ]
>>200
それ同期違う。
ここでの同期は、転送が完了してから制御を返すこと。
逆に、転送が完了するのを確認せずに制御を返す関数が非同期。

212 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 01:12:23 ]
入力されたパスのフォルダに入っているファイルを
リストコントロールに表示させているのですが、
この時のパスを格納するための配列は256バイトあれば大丈夫ですか?

213 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 01:13:54 ]
せめてMAX_PATH。

214 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 01:16:08 ]
成る程260バイトですか、ありがとうございます。

215 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 01:23:25 ]
>>214
そのレスだと平気で
p = (LPTSTR)malloc(260);
とか書きそうな雰囲気だな

まあ俺には関係ないからどうでもいいが

216 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 07:40:27 ]
>>215
そのように書く事によって何か問題が起こるとは予想がつかないのですが、
相応しくない書き方、という事ですね、
すみませんが、理由を知りたいです。

217 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 07:58:57 ]
261あったらどうするの?

218 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 08:30:11 ]
必要なだけ確保する
それが動的メモリ
逆に無駄な分は確保しない

219 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 08:35:13 ]
ちょっとまて、お前ら答えを教えてやれよw
まあ、自分で探すのも大切ではあるが。

220 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 09:13:07 ]
知らないならレスしないでください



221 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 09:52:51 ]
>>216
ヒント

#ifdef _UNICODE
 typedef wchat_t * LPTSTR;
#else
 typedef char * LPTSTR;
#endif

222 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 10:14:36 ]
>>212
んな事ぁ手前で好きに決めるもんだ。

223 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 10:35:43 ]
MAX_PATH * sizeof(TCHAR)

224 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:10:27 ]
知ってるならレスしないでください

225 名前:デフォルトの名無しさん [2008/04/26(土) 11:15:52 ]
↑話を理解してない馬鹿

226 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:17:17 ]
↑自演馬鹿

227 名前:デフォルトの名無しさん [2008/04/26(土) 11:20:41 ]
↑正解

228 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:39:27 ]
      _、_
    ヽ( ,_ノ`)ノ チッ、乗り遅れたか・・・
   へノ   /
┌→  ω  へ





229 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:15:23 ]
まだ誰も言っていないが、260じゃなくてMAX_PATHって定数使えよ。

230 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:24:36 ]
>>229
>>223



231 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:36:15 ]
MAX_PATHはかなり前に出てる
質問者が勝手に260に変換しただけ

232 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:06:42 ]
この中に、「MAX_PATH を超えるパス名など存在しない」と思ってる人が!

233 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:11:35 ]
そんなのexplorerだっていい加減だから気にしなくていい

234 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:15:23 ]
www.google.co.jp/search?q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D+%E6%9C%80%E5%A4%A7

嘘書いてるのも多いしなあ(FAT32の話をしてるのかも知れんが)


235 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:20:11 ]
↑話を理解してない馬鹿

236 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 14:26:07 ]
double型の数値を表示するのに、

double dbl=1.23;
char res[32];
wsprintf(res,"%f",dbl)
SetWindowText(hWnd, res);

とするとfと表示されるだけです。
どこがおかしいでしょうか?

237 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 14:47:49 ]
>>236
L"%f"

238 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 14:49:19 ]
wsprintfは実数使えないよ

239 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 15:05:48 ]
せめてMSDNでAPIの説明を読んでから質問しろよ

240 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 15:06:22 ]
StringCchPrintf



241 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 19:45:36 ]
>>237-240
超亀ですが、ありがとうございました。
もっとちゃんと勉強しなおします。。

242 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 23:13:13 ]
>>191
ttp://web.archive.org/web/20030625222552/www.osr.com/ntinsider/1996/fastio.htm


243 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:14:39 ]
wsprintf の 'w' って "Windows" のことだよね?
lstrcpy の 'l' はさっぱり分からん

244 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:19:29 ]
同じように95時代のソースみてると _lopen とかつかってて _l ってなによって思う


245 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:38:55 ]
LPSTRと同じようにlong pointerじゃないの?

246 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:39:42 ]
指定の他のソフトにきているメッセージを調べる方法ってありませんか?

247 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:48:22 ]
グローバルフック

248 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:58:24 ]
lsprintfでも良かったのにwsprintfなのが謎
kernel32.dllじゃなくてuser32.dllにあるのも謎
しかもWin9x系だと実体はkernel32.dll内にあってuser32!w(v)sprintfは実体にjmpしてるだけだし

249 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 03:00:35 ]
swprintf と wsprintf があるからややこしいんだよな。
しかもそれでいて wsprintf は %f がないという大きな仕様の差があるし。

250 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 03:07:23 ]
CRT: sprintf, swprintf
Win32: wsprintf

CRT: vsprintf, vswprintf
Win32: wvsprintf

CRT: _snprintf, _snwprintf
Win32: wnsprintf

CRT: _vsnprintf, _vsnwprintf
Win32: wvnsprintf

>>249
それだけじゃないぞ。
wsnprintf じゃなくて wnsprintf とか、もうアホかと。



251 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 04:42:39 ]
>>250
こういうの、1〜2回/年くらいしか趣味でWinアプリをつくらない
ハード屋のおいらにはつらい

252 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 05:07:35 ]
シーケンシャルで読み捨てるんだったら
メモリマップトファイル使っても効率落ちるだけですかね?

253 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 06:03:19 ]
読み捨てるのに明示的にマップする必要なんてあんのか

254 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 08:03:24 ]

ReadDirectoryChangesW() を同期モードでワーカースレッドで使用した場合に,
メインスレッドから制御を変えさせる(中断させる)方法ってありますか?

255 名前:デフォルトの名無しさん [2008/04/27(日) 11:04:31 ]
multimedia timerとhigh-resolution timerの使い分けはどのようにすればいいのでしょうか?

256 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:09:24 ]
気分しだい

257 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:17:27 ]
同期用のディレクトリハンドルを閉じてみるとか

258 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:38:51 ]
>>252
数MBくらいのファイルだが、
シーケンシャルな読み取りしかしないときにメモリマップしたら、
バッファリングありで普通に読み取るよりは速かった覚えがある。

259 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:41:45 ]
バッファリングぐらい自前でしろよ

260 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:43:18 ]
>>257
今やってみたけど制御帰らなかった…(´・ω・`)



261 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:36:16 ]
1.clやgccでコンパイル・リンクして出来上がった*.exeファイルは、
 CPU(ペンティアム等)が直接理解できる形式のファイルなのでしょうか?
2.上記の答えが「直接理解できないファイル」の場合。
 CPUが直接理解できるファイルを、clやgccで作成することは出来ますか?
 
質問の意図。
出来るだけ速く動作させたいとか直接的な理由はありません、
知識として知っておきたいのが質問の意図です。

262 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:37:42 ]
ほぼ直接理解できる形式になっている。
ほぼってのは、プログラムをメモリ上にロードする際に
OS が少し手を加えるから。

263 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:44:42 ]
そもそもCPUは命令をデコードしてから実行してるからCPUが直接理解できるなんて有り得ない訳だが

264 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:51:20 ]
デコーダも CPU 内にあるし

265 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:57:23 ]
いや、IntelやAMDが配ってる命令リストに記述されてるもんであれば
直接解釈しているとみなして良いと思うが

266 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:15:32 ]
>>261
exeやdllは必ずしもCPUネイティブなマシン語とは限らんぞ。
/clrでコンパイルしたらMSILになるからな。

267 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:17:04 ]
そうか cl だとそれがあったか

268 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 20:11:29 ]
マイクロプログラムってソフトウェアなのかハードウェアなのかよくわからんよな。

269 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 02:47:55 ]
Win32APIで.NETのexeからリソースを取り出すのってどうすればいいの?
FindResourceじゃ取れないし

270 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 03:06:49 ]
アンマネージホスト用のインタフェース・関数がmscoree.dllとかから出ているから、
それを使ってやればいいんじゃないかな?

CLRを読み込んで、アセンブリ (EXE)を読み込んだら、
あとはCOMインタフェースで.NET Frameworkクラスライブラリを使う。
実際できるかどうかわからないけど、100%ネイティブでやれるとしたらこんな感じのはず。



271 名前:デフォルトの名無しさん [2008/04/28(月) 04:50:39 ]
>>270
それネイティブじゃないだろw

272 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 15:36:29 ]
GetGlyphOutline で TrueType font の情報を取ってきているんですが、
OUTLINETEXTMETRIC 構造体の otmsCapEmHeight って何の値が入っているか
知っている方いらっしゃいますか。

MSのヘルプ系には Not supported.ってしか書いてないんですよね

そのわりにはしっかり値入ってるし、どうもほしい値っぽいし・・・

273 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 15:46:02 ]
Caption Embed Height
キャプションに配置した時の高さ


勘で言った。気にしないでくれ

274 名前:デフォルトの名無しさん [2008/04/28(月) 15:46:22 ]
32bitOS上で、32bitアプリは特別なことしないとユーザー2GB、
カーネル2GBですよね。

64bitOS上だと、この2GB&2GBは変わらないのでしょうか?
ちとスレ違いかも知れんけどWin32アプリの仕様に関してなので、
ここで質問してみました。

ググっても資料見つかんなかったです。検索下手ですね。すみません

275 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:03:00 ]
>>274
これがそれっぽい?
msdn2.microsoft.com/en-us/library/aa384219(VS.85).aspx

>On the x64 processor, each 32-bit application receives 4 GB virtual address space in the WOW64 environment,
>if the application has the IMAGE_FILE_LARGE_ADDRESS_AWARE flag set in the image header.
>If this flag is not set, the 32-bit application receives 2 GB virtual address space.

276 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:07:54 ]
64bitOS上で、32bitアプリってこと?
リンカでスイッチ入れない場合は上限2GBでかわらない。
入れた場合は4GBまで使える。

277 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:15:25 ]
>>276
一つ上のレスも見えんのか

278 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:42:04 ]
>>277
お節介な話だが、>>276 氏は>>274 を見てレスを考えている最中に先に
>>275 が入って、ちぐはぐになったんじゃね。

279 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:46:20 ]
ファイルパスが長い場合に途中を...に置き換えてくれる関数みたいに
指定された長さ以下になるまで8.3形式に縮めてくれる関数ないですか。

280 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:52:47 ]
>>278
つまりこういう事か
ケコーンしる>>276>>277

>>279
> 指定された長さ以下になるまで8.3形式に縮めてくれる
何が言いたいのかさっぱり分からん



281 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:53:30 ]
まつがえた
ケコーンしる>>275>>276

282 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 17:00:00 ]
>>279
上のほうはPathCompactPath(Ex)

283 名前:282 mailto:sage [2008/04/28(月) 17:01:52 ]
質問ちゃんと読んでなかった。忘れて

284 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 17:21:02 ]
なんでお前らそんなに物知りなんだ……?

285 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 17:25:28 ]
・指定された長さ以下になるまで縮める
 PathCompactPath、PathCompactPathEx、DrawTextEx

・8.3形式に縮める
 GetShortPathName

・指定された長さ以下になるまで8.3形式に縮める
 ???

286 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 18:01:35 ]
>>275>>276
ありがとん
例の3GBスイッチ入れたら64bitOS上でユーザー4GBですね。
もうこれで十分だああああ。
64bitアプリを作るのはいつのことになるやら…

287 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 19:45:30 ]
>>272
ぐぐっただけだが。
ttp://source.winehq.org/source/dlls/gdi/freetype.c?v=wine20011226
には「potm->otmsCapEmHeight = pOS2->sCapHeight」と書いてある。

で、「sCapHeight」を調べたら
ttp://www.microsoft.com/OpenType/OTSpec/os2.htm
This metric specifies the distance between the baseline and the approximate
height of uppercase letters measured in FUnits. This value would normally be specified
by a type designer but in situations where that is not possible, for example when a
legacy font is being converted, the value may be set equal to the top of the unscaled
and unhinted glyph bounding box of the glyph encoded at U+0048 (LATIN CAPITAL
LETTER H). If no glyph is encoded in this position the field should be set to 0.

This metric, if specified, can be used in systems that specify type size by capital height
measured in millimeters. It can also be used as an alignment metric; the top of a drop
capital, for instance, can be aligned to the sCapHeight metric of the first line of text.

288 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 19:57:02 ]
日本語でおk

289 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:08:53 ]
wineのソースかよ

290 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:26:35 ]
>286
例の3GBスイッチって何?



291 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:32:24 ]
>>290
link.exe /LARGEADDRESSAWARE

292 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:34:42 ]
どこらへんが3GBなの?

293 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:36:45 ]
ヒントもらったんだから少しは調べて聞けよ・・

294 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:45:32 ]
boot.iniに仕込むほうの/3GBと紛らわしくてイケナイし、
内実がしめしているものと意味合いが異なりすぎるのに
LARGEADDRESSAWAREを3GBスイッチとか言うのはなぜ?

295 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:56:53 ]
↑話を理解してない馬鹿

296 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 21:16:48 ]
>>252
実際にやったことある。
もう必要ないページが物理メモリに残って、また必要になるページが追い出されて、
ぐだぐだな状態になったよ。

ワーキングセットを自分でトリムすりゃいいんだろうけど、
そしたら自分に必要なページまで削られちまうかも。

297 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:34:59 ]
>>294
大いに関係ある。
/LARGEADDRESSAWARE付けたEXEが実際に2GB超のメモリを使うには、
boot.iniで/3GBを入れていないといけない。
(あるいは上に話があったように64ビットWindowsにするか)


298 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:41:52 ]
2000だとシステム空間は減るのにユーザのメモリ空間は変わらないんだよな、確か

299 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 23:43:14 ]
煽り目的の人はシンデイイヨ

300 名前:272 mailto:sage [2008/04/29(火) 01:22:40 ]
>>287
ありがとう
そのあたりも調べてみます。



301 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 01:54:18 ]
すみません。質問させていただけますでしょうか。
今現在、SetTimerを用いてWM_TIMERを送ってもらっているのですが、
タイマーの精度が低いので、timeGetTime関数を使ってみようと思ったのですが
これがうまくいきません。
具体的なやり方のようなものをご存知の方がいらっしゃいましたら、ご教示くださいませ

302 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 01:59:20 ]
マルチメディアタイマーつかっとけ






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

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

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