Win32APIについての質問はこちらへどうぞ。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
■過去スレ
Win32API質問箱 Build125
https://mevius.5ch.net/test/read.cgi/tech/1551247748/
Win32API質問箱 Build124
https://mevius.5ch.net/test/read.cgi/tech/1510395780/
■関連スレ
Visual Studio 2019 Part4 https://mevius.5ch.net/test/read.cgi/tech/1585715794/
Visual Studio 2017 Part7 https://mevius.5ch.net/test/read.cgi/tech/1558179898/
【C++】 DirectX初心者質問スレ Part41 【C】 https://mevius.5ch.net/test/read.cgi/tech/1521786252/
Win32API質問箱 Build126
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/05/01(金) 22:16:51.96ID:ZJ42fMZB337デフォルトの名無しさん
2020/09/22(火) 08:26:19.44ID:bhDrmv5D LPWSTR
338デフォルトの名無しさん
2020/09/22(火) 12:46:05.64ID:EoOf3jnh ありがとうございます。
調べてみます。
stringを使いたいのに、win32apiは変換が必要?なので躊躇しています。
調べてみます。
stringを使いたいのに、win32apiは変換が必要?なので躊躇しています。
339デフォルトの名無しさん
2020/09/22(火) 13:48:40.94ID:YDb2rcNJ CreateProcessのユニコード版(W)の第2引数がリテラルだとうまくいかない件
これはハマったわ。
CreateProcess(TCHAR)でメモ帳起動させるサンプルで
_T("C:\\Windows\\notepad.exe")を直接与えてもCとしてコンパイルするとうまくいってて
c++にしたら起動しなくなったが、エラーが出ないから全然気づかなかったわ
ネットのCreateProcessのサンプルも普通に与えてるしなあ
考えてみれば実運用でこの部分は文字リテラル決め打ちにめったにならないから
知らずに回避してることも多いのかも
これはハマったわ。
CreateProcess(TCHAR)でメモ帳起動させるサンプルで
_T("C:\\Windows\\notepad.exe")を直接与えてもCとしてコンパイルするとうまくいってて
c++にしたら起動しなくなったが、エラーが出ないから全然気づかなかったわ
ネットのCreateProcessのサンプルも普通に与えてるしなあ
考えてみれば実運用でこの部分は文字リテラル決め打ちにめったにならないから
知らずに回避してることも多いのかも
341デフォルトの名無しさん
2020/09/22(火) 14:16:32.73ID:yrkD80aj そもそもMSDNに書いてるし
342デフォルトの名無しさん
2020/09/22(火) 14:16:37.87ID:5Q3AK6nV LPTSTR で受け取ってるから書き換え可能なメモリアドレスでないとあかんのじゃないのん?
リテラルは const で書き換え不可だし 一回変数経由しないと
リテラルは const で書き換え不可だし 一回変数経由しないと
343デフォルトの名無しさん
2020/09/22(火) 14:22:15.75ID:uF0JvJPV 自転車🚴のような絵文字をstd::stringで持つにはSJISではなくUTF-8として保持しておいて、
画面などの出力する直前にUTF-8からUTF-16に変換してUnicode版出力関数を呼び出す必要がある。
画面などの出力する直前にUTF-8からUTF-16に変換してUnicode版出力関数を呼び出す必要がある。
344デフォルトの名無しさん
2020/09/22(火) 15:28:51.96ID:J6Z/5nZW >>339
>lpCommandLine
>実行するコマンドライン。
>この文字列の最大長は、Unicodeで終了するnull文字を含めて32,767文字です。 lpApplicationNameがNULLの場合、lpCommandLineのモジュール名の部分はMAX_PATH文字に制限されます。
>この関数のUnicodeバージョンであるCreateProcessWは、この文字列の内容を変更できます。
>したがって、このパラメーターを読み取り専用メモリー(const変数やリテラル文字列など)へのポインターにすることはできません。
>このパラメーターが定数文字列の場合、関数はアクセス違反を引き起こす可能性があります。
>lpCommandLine
>実行するコマンドライン。
>この文字列の最大長は、Unicodeで終了するnull文字を含めて32,767文字です。 lpApplicationNameがNULLの場合、lpCommandLineのモジュール名の部分はMAX_PATH文字に制限されます。
>この関数のUnicodeバージョンであるCreateProcessWは、この文字列の内容を変更できます。
>したがって、このパラメーターを読み取り専用メモリー(const変数やリテラル文字列など)へのポインターにすることはできません。
>このパラメーターが定数文字列の場合、関数はアクセス違反を引き起こす可能性があります。
345デフォルトの名無しさん
2020/09/25(金) 09:12:14.46ID:3+LaQyVV >>339
argvに渡すから非constだぞって話か
argvに渡すから非constだぞって話か
346デフォルトの名無しさん
2020/09/25(金) 10:57:09.24ID:4ovx1Tzj 非 const の引数に const リテラル与えたら
コンパイルエラーにならないか?
コンパイルエラーにならないか?
347デフォルトの名無しさん
2020/09/25(金) 11:44:47.33ID:cdg8K9Zm それがエラーになるなら固定文字列を渡せなくなるやん
348デフォルトの名無しさん
2020/09/25(金) 12:18:15.76ID:3+LaQyVV >>346
C++11以後、そうなった筈だけどcl.exeはversion 19.27.29111でも通す(もち/W4で)
C++11以後、そうなった筈だけどcl.exeはversion 19.27.29111でも通す(もち/W4で)
349デフォルトの名無しさん
2020/09/25(金) 18:33:43.19ID:M9uVftQk Win32API全部作り直してほしい
くだらない部分で人間の時間を消費しすぎだろw
くだらない部分で人間の時間を消費しすぎだろw
350デフォルトの名無しさん
2020/09/25(金) 18:41:06.52ID:14hC/BSs351デフォルトの名無しさん
2020/09/25(金) 18:57:00.47ID:3+LaQyVV >>350
御意
御意
>>349
どんなところがダメなんでしょうか?
どんなところがダメなんでしょうか?
353デフォルトの名無しさん
2020/09/25(金) 21:58:40.78ID:62tG58VZ WINDK使ってサブシステム毎作り直せば良いのに
354蟻人間 ◆T6xkBnTXz7B0
2020/09/25(金) 22:05:15.01ID:ogXn8IQh コンパイルできるXPのソースが漏れてるらしい。
355デフォルトの名無しさん
2020/09/27(日) 00:13:50.58ID:Tq9/SM8I356デフォルトの名無しさん
2020/09/28(月) 13:45:59.88ID:A9tQ9Jdm 7もお漏らしして欲しいね
357デフォルトの名無しさん
2020/09/28(月) 13:53:48.40ID:n9LyrBhU 未だに使ってる奴が死ぬだけ
358デフォルトの名無しさん
2020/09/28(月) 14:33:51.78ID:PAQov7G9 海賊版天国の中国死ぬの?
359デフォルトの名無しさん
2020/09/28(月) 15:10:38.57ID:q9HWvXQA 穴がさらにいっぱい見つかって攻撃方法が増えるんだから自明だろ
誰が対応するんや
誰が対応するんや
360デフォルトの名無しさん
2020/09/28(月) 16:14:01.27ID:n0MW1Etw 久しぶりに Windows Update したら
Edge レイプされてポカーン
Edge レイプされてポカーン
361デフォルトの名無しさん
2020/09/28(月) 16:42:43.52ID:8K79+FWG スカ ポン タン
362デフォルトの名無しさん
2020/09/28(月) 16:51:28.28ID:QxfbhGyV > Edge レイプ
うまい!
うまい!
363デフォルトの名無しさん
2020/09/29(火) 21:54:15.29ID:6fvRDqpi _beginthreadexだけは許さんよ
もっとも醜悪な名前だわ
もっとも醜悪な名前だわ
364デフォルトの名無しさん
2020/09/29(火) 21:58:00.70ID:LdxVDSVq MJD?
365デフォルトの名無しさん
2020/10/01(木) 23:20:42.73ID:rwmZapHm >>363 すれち
366蟻人間 ◆T6xkBnTXz7B0
2020/10/18(日) 23:53:11.43ID:cRjbazHq http://eternalwindows.jp にはWin32の核心部分が載ってる。参考になる記事だ。
367デフォルトの名無しさん
2020/10/27(火) 20:43:03.29ID:rXCQsaV4 GetOpenFileName で初期ディレクトリとして OPENFILENAME の lpstrInitialDir に
任意のディレクトリを指定してファイルを開くダイアログを開いていて、おおよそ
意図した通りに動いているのですが、"C:\Users\Public\Documents"を指定したときだけ
初期ディレクトリが現在使用中ユーザーのドキュメントディレクトリになってしまいます
アクセス権のない他のユーザーのドキュメントディレクトリを指定したのなら
このような動作は理解できるのですが、パブリックディレクトリでこのように
なってしまうのは仕様でしょうか?
任意のディレクトリを指定してファイルを開くダイアログを開いていて、おおよそ
意図した通りに動いているのですが、"C:\Users\Public\Documents"を指定したときだけ
初期ディレクトリが現在使用中ユーザーのドキュメントディレクトリになってしまいます
アクセス権のない他のユーザーのドキュメントディレクトリを指定したのなら
このような動作は理解できるのですが、パブリックディレクトリでこのように
なってしまうのは仕様でしょうか?
368デフォルトの名無しさん
2020/10/28(水) 11:43:37.22ID:Mf8tEr2f SHGetSpecialFolderPath
369デフォルトの名無しさん
2020/10/28(水) 17:45:50.04ID:DoZwgPmf パブリックディレクトリの取得方法を聞いているわけではないのですが
"C:\Users\Public\Documents" は存在する有効なパスです
"C:\Users\Public\Documents" は存在する有効なパスです
370デフォルトの名無しさん
2020/10/28(水) 18:30:52.56ID:Mf8tEr2f 再現した
C:\Users\Public
ならちゃんと public が開くが
C:\Users\Public\Documents
にすると自分のアカウントに行ってしまう
C:\Users\Public
ならちゃんと public が開くが
C:\Users\Public\Documents
にすると自分のアカウントに行ってしまう
371デフォルトの名無しさん
2020/10/28(水) 18:36:57.63ID:Mf8tEr2f あと存在しないディレクトリを与えると
C:\Users\自分のアカウント\Documents
が開いた
C:\Users\自分のアカウント\Documents
が開いた
372デフォルトの名無しさん
2020/10/28(水) 18:41:30.63ID:Mf8tEr2f lpstrInitialDir
The initial directory. The algorithm for selecting the initial directory varies on different platforms.
Windows 7:
If lpstrInitialDir has the same value as was passed the first time the application used an Open or Save As dialog box, the path most recently selected by the user is used as the initial directory.
Otherwise, if lpstrFile contains a path, that path is the initial directory.
Otherwise, if lpstrInitialDir is not NULL, it specifies the initial directory.
If lpstrInitialDir is NULL and the current directory contains any files of the specified filter types, the initial directory is the current directory.
Otherwise, the initial directory is the personal files directory of the current user.
Otherwise, the initial directory is the Desktop folder.
Windows 2000/XP/Vista:
If lpstrFile contains a path, that path is the initial directory.
Otherwise, lpstrInitialDir specifies the initial directory.
Otherwise, if the application has used an Open or Save As dialog box in the past, the path most recently used is selected as the initial directory. However, if an application is not run for a long time, its saved selected path is discarded.
If lpstrInitialDir is NULL and the current directory contains any files of the specified filter types, the initial directory is the current directory.
Otherwise, the initial directory is the personal files directory of the current user.
Otherwise, the initial directory is the Desktop folder.
The initial directory. The algorithm for selecting the initial directory varies on different platforms.
Windows 7:
If lpstrInitialDir has the same value as was passed the first time the application used an Open or Save As dialog box, the path most recently selected by the user is used as the initial directory.
Otherwise, if lpstrFile contains a path, that path is the initial directory.
Otherwise, if lpstrInitialDir is not NULL, it specifies the initial directory.
If lpstrInitialDir is NULL and the current directory contains any files of the specified filter types, the initial directory is the current directory.
Otherwise, the initial directory is the personal files directory of the current user.
Otherwise, the initial directory is the Desktop folder.
Windows 2000/XP/Vista:
If lpstrFile contains a path, that path is the initial directory.
Otherwise, lpstrInitialDir specifies the initial directory.
Otherwise, if the application has used an Open or Save As dialog box in the past, the path most recently used is selected as the initial directory. However, if an application is not run for a long time, its saved selected path is discarded.
If lpstrInitialDir is NULL and the current directory contains any files of the specified filter types, the initial directory is the current directory.
Otherwise, the initial directory is the personal files directory of the current user.
Otherwise, the initial directory is the Desktop folder.
373デフォルトの名無しさん
2020/10/28(水) 19:43:23.12ID:RpzUgl/d comdlg32.dllのコモンダイアログ関係は >>367 のような想定外の動きをしたり
右クリックのコンテキストメニューで存在しない32bitフォルダを探しに行ったりと色々不具合を抱えてる
明らかにメンテされてない
ダイアログ内のListViewで開発者の想定外の事ができたりするから許されるなら使わない方が良い
右クリックのコンテキストメニューで存在しない32bitフォルダを探しに行ったりと色々不具合を抱えてる
明らかにメンテされてない
ダイアログ内のListViewで開発者の想定外の事ができたりするから許されるなら使わない方が良い
374デフォルトの名無しさん
2020/10/28(水) 20:10:50.98ID:xBovneds コモンコントロール使ってるアプリに使うなと言ってしまうと、開発プラットフォームから見直さないとダメ案件では
375デフォルトの名無しさん
2020/10/29(木) 10:55:01.44ID:XU4TLDfA376デフォルトの名無しさん
2020/10/29(木) 11:27:15.51ID:wwhOrfBp XP 以前と 7 で違うんだから
10 ならさらに変更されたとかありそう
10 ならさらに変更されたとかありそう
377デフォルトの名無しさん
2020/10/29(木) 11:29:27.07ID:wwhOrfBp >コモンコントロール部分だけ差し替えが可能なもの
秀丸ファイラーのdllって無かったかな
秀丸ファイラーのdllって無かったかな
378デフォルトの名無しさん
2020/10/29(木) 13:09:04.28ID:rgNs+gPO IFileDialog使えって話でもないのん?
379デフォルトの名無しさん
2020/11/12(木) 11:33:46.92ID:Twa29Hwt こんにちは、お世話になります。DLLファイルの削除について質問です。
プログラム終了時にロードしたDLLファイルを削除したいのですが、
場合により削除できたりできなかったりします。
実際にはもう少し複雑ですが、大まかな処理の手順を示します。
1: inst=LoadLibrary("tmp.dll")
2: hook=SetWindowsHookEx(...)
3: ...あれやこれやの処理...
4: ret1=UnhookWindowsHookEx(hook)
5: ret2=FreeLibrary(inst)
6: ret3=DeleteFile("tmp.dll")
処理部[3:]は、所望の通り動作していて、inst,hook共に正常値のよ
うです。アプリケーション終了時に[4:]以降の処理を行います。ret1,
ret2は成功値を返すのですが、ret3は失敗し、GetLastErrorの値は5で
ERROR_ACCESS_DENIED「アクセス拒否」を返してきます。アプリ
ケーション終了後はプロンプトからのDELコマンドに成功します。
処理部[3:]をスキップすると、ret3は成功値を返しファイルもただ
しく削除されています。
FreeLibraryだけでは、DLLを開放してくれないのかと思っていますが、
少し手つまりになっています。当方、日曜プログラマレベルの知識で
す。質問などに不備等ございましたらご指摘ください。
(環境)Win10-64bit,Vs2019Comm,VC++
プログラム終了時にロードしたDLLファイルを削除したいのですが、
場合により削除できたりできなかったりします。
実際にはもう少し複雑ですが、大まかな処理の手順を示します。
1: inst=LoadLibrary("tmp.dll")
2: hook=SetWindowsHookEx(...)
3: ...あれやこれやの処理...
4: ret1=UnhookWindowsHookEx(hook)
5: ret2=FreeLibrary(inst)
6: ret3=DeleteFile("tmp.dll")
処理部[3:]は、所望の通り動作していて、inst,hook共に正常値のよ
うです。アプリケーション終了時に[4:]以降の処理を行います。ret1,
ret2は成功値を返すのですが、ret3は失敗し、GetLastErrorの値は5で
ERROR_ACCESS_DENIED「アクセス拒否」を返してきます。アプリ
ケーション終了後はプロンプトからのDELコマンドに成功します。
処理部[3:]をスキップすると、ret3は成功値を返しファイルもただ
しく削除されています。
FreeLibraryだけでは、DLLを開放してくれないのかと思っていますが、
少し手つまりになっています。当方、日曜プログラマレベルの知識で
す。質問などに不備等ございましたらご指摘ください。
(環境)Win10-64bit,Vs2019Comm,VC++
380デフォルトの名無しさん
2020/11/12(木) 11:49:17.96ID:Twa29Hwt 追記
2: hook=SetWindowsHookEx(WH_KEYBOARD_LL,proc,inst,0)
フックにDLLインスタンスが絡みます。
2: hook=SetWindowsHookEx(WH_KEYBOARD_LL,proc,inst,0)
フックにDLLインスタンスが絡みます。
381デフォルトの名無しさん
2020/11/12(木) 11:54:18.15ID:fy6Pt/Zo 1〜2をやるボタンAと
4〜5をやるボタンBを配置して
ボタンBを押してから6やってみた?
4〜5をやるボタンBを配置して
ボタンBを押してから6やってみた?
382デフォルトの名無しさん
2020/11/12(木) 12:09:45.05ID:Twa29Hwt >>381 ありがと
いや、そういう処理の分解はやってないです。
ただ、[5:]と[6:]の間にSleep(10000)を挟んでみた。OSが手放してくれる時
間?が必要かと思って・・・でも、そういう事じゃないみたい。
ボタンの配置はすぐには難しいですが(汗)。でも、とりあえず、物は試しで
ユーザの入力待ちを挟んでみます。getch()あたりで・・・。
いや、そういう処理の分解はやってないです。
ただ、[5:]と[6:]の間にSleep(10000)を挟んでみた。OSが手放してくれる時
間?が必要かと思って・・・でも、そういう事じゃないみたい。
ボタンの配置はすぐには難しいですが(汗)。でも、とりあえず、物は試しで
ユーザの入力待ちを挟んでみます。getch()あたりで・・・。
383デフォルトの名無しさん
2020/11/12(木) 12:16:08.75ID:f5BAQJxF DLL_PROCESS_DETACH が正しく呼ばれてないか処理されてないんじゃね
https://stackoverflow.com/questions/19934000/how-to-correctly-dispose-of-injected-dll-thread
https://stackoverflow.com/questions/19934000/how-to-correctly-dispose-of-injected-dll-thread
384デフォルトの名無しさん
2020/11/12(木) 12:17:21.07ID:f5BAQJxF あと 6 だけ実行する別のアプリを造っておいて
アプリ終了後にそれを呼ぶとか
アプリ終了後にそれを呼ぶとか
385デフォルトの名無しさん
2020/11/12(木) 12:23:11.40ID:Twa29Hwt >>383
モニタしてみる。
モニタしてみる。
386デフォルトの名無しさん
2020/11/12(木) 12:25:59.48ID:Twa29Hwt ・・・呼ばれてない
387デフォルトの名無しさん
2020/11/12(木) 12:31:44.05ID:Twa29Hwt 379です。進展しそうなので、この質問はいったんクローズさせてください。
グーグル先生に「dll_process_detach 呼ばれない」と聞くと、イロイロ出て
きそうです。
381、383 ありがとうございました m(_ _)m
グーグル先生に「dll_process_detach 呼ばれない」と聞くと、イロイロ出て
きそうです。
381、383 ありがとうございました m(_ _)m
388デフォルトの名無しさん
2020/11/12(木) 17:06:23.69ID:n8RQesMu 呼び出しプロセスが終了するまではDLLの解放はされなかった気がする
つまり>>384が正解なのではないかと
つまり>>384が正解なのではないかと
389デフォルトの名無しさん
2020/11/12(木) 20:28:25.76ID:g7bSPYZf 32bitアプリからShellExecuteでバッチファイルを呼ぶと当然ながら32bit環境で実行されるんだけど
これを64bitに強制できないかな
これを64bitに強制できないかな
390蟻人間 ◆T6xkBnTXz7B0
2020/11/12(木) 20:47:44.37ID:vr1SOjIj >>389
Wow64DisableWow64FsRedirectionを使う痛い方法があるけど、推奨できない。64bit processを経由した方が痛みは少ない。
Wow64DisableWow64FsRedirectionを使う痛い方法があるけど、推奨できない。64bit processを経由した方が痛みは少ない。
391デフォルトの名無しさん
2020/11/12(木) 20:48:10.58ID:g7bSPYZf でてきた
PVOID m_lpOldVar = 0;
Wow64DisableWow64FsRedirection(&m_lpOldVar);
//この間に書けばいいらしい
ShellExecute(hWnd,"open","cmd","param","dir",SW_SHOWNORMAL);
Wow64RevertWow64FsRedirection(&m_lpOldVar);
これでいいのかな?
PVOID m_lpOldVar = 0;
Wow64DisableWow64FsRedirection(&m_lpOldVar);
//この間に書けばいいらしい
ShellExecute(hWnd,"open","cmd","param","dir",SW_SHOWNORMAL);
Wow64RevertWow64FsRedirection(&m_lpOldVar);
これでいいのかな?
392デフォルトの名無しさん
2020/11/12(木) 20:53:06.64ID:g7bSPYZf ほんとは32bitアプリを64bit化すりゃいいんだけど思いの外大変なので諦めた
以下バッチ側で判定する方法
@echo off
if %PROCESSOR_ARCHITECTURE%==x86 (
if "%PROCESSOR_ARCHITEW6432%" == "AMD64" (
rem 32bit WOW64
C:\Windows\sysnative\cmd.exe /c %~dp0%~n0%~x0
exit /b 0
) else (
goto :PASSX64
)
) else (
goto :PASSX64
)
:PASSX64
以降x64前提の処理
以下バッチ側で判定する方法
@echo off
if %PROCESSOR_ARCHITECTURE%==x86 (
if "%PROCESSOR_ARCHITEW6432%" == "AMD64" (
rem 32bit WOW64
C:\Windows\sysnative\cmd.exe /c %~dp0%~n0%~x0
exit /b 0
) else (
goto :PASSX64
)
) else (
goto :PASSX64
)
:PASSX64
以降x64前提の処理
393蟻人間 ◆T6xkBnTXz7B0
2020/11/12(木) 20:54:02.43ID:vr1SOjIj リダイレクトを無効化して、system32のcmdを指定すればいけるやろ。
394デフォルトの名無しさん
2020/11/12(木) 22:20:33.81ID:4764QnvC プロセス起動だけを担当する小さな64bitアプリを作ればいいじゃない。
395デフォルトの名無しさん
2020/11/15(日) 15:23:41.28ID:18uzJ+HT 379です。
LoadLibrary()でロードしたDLLが呼び出しプロセスから削除できない件のご報告。
方法が正しいのか悪いのか(不具合を発生させる可能性を持つのか)わかりませんが、
削除することには成功しました。383さんがご指摘の「DLL_PROCESS_DETACH
が呼ばれてないんじゃない?」とMSDNのFreeLibraryの文書をヒントに、
FreeLibrary()がゼロを返すまで複数回繰り返す方法で対処できました。DLLモ
ジュールへの参照数が無くなった時点でDLL_PROCESS_DETACHが発生するよう
です。また、ゼロを返した時のGetLastError()値は126(ERROR_MOD_NOT_FOUND)
です。
適当にいじりながらモニタしてみるました。すると、DLL_PROCESS_ATTACHは
1回しか呼び出されていないにもかかわらず、DLLモジュールは1または2の参照カ
ウントを持っているようです。どのタイミングで2になるのか、また3回目が発生
しないのかは、追い切れていません(汗。エラー検出で正常・・・的な行儀のよい
コードとは思えませんが、とりあえず、要モニタリングで先に進みたいとおもいま
す。
このあたり、お詳しい方がおられましたらご指導いただけると助かります。今のと
ころ困ってはいませんので、お暇なときにでも^^。ありがとうございました。
LoadLibrary()でロードしたDLLが呼び出しプロセスから削除できない件のご報告。
方法が正しいのか悪いのか(不具合を発生させる可能性を持つのか)わかりませんが、
削除することには成功しました。383さんがご指摘の「DLL_PROCESS_DETACH
が呼ばれてないんじゃない?」とMSDNのFreeLibraryの文書をヒントに、
FreeLibrary()がゼロを返すまで複数回繰り返す方法で対処できました。DLLモ
ジュールへの参照数が無くなった時点でDLL_PROCESS_DETACHが発生するよう
です。また、ゼロを返した時のGetLastError()値は126(ERROR_MOD_NOT_FOUND)
です。
適当にいじりながらモニタしてみるました。すると、DLL_PROCESS_ATTACHは
1回しか呼び出されていないにもかかわらず、DLLモジュールは1または2の参照カ
ウントを持っているようです。どのタイミングで2になるのか、また3回目が発生
しないのかは、追い切れていません(汗。エラー検出で正常・・・的な行儀のよい
コードとは思えませんが、とりあえず、要モニタリングで先に進みたいとおもいま
す。
このあたり、お詳しい方がおられましたらご指導いただけると助かります。今のと
ころ困ってはいませんので、お暇なときにでも^^。ありがとうございました。
396デフォルトの名無しさん
2020/11/15(日) 15:57:26.98ID:1cE4y5+G >FreeLibrary()がゼロを返すまで複数回繰り返す
なるほど
自分以外が使ってないことが確実に言えるならこれで良いんじゃないかな
なるほど
自分以外が使ってないことが確実に言えるならこれで良いんじゃないかな
397デフォルトの名無しさん
2020/11/15(日) 16:00:32.57ID:U+/Dwi3J 実は自分で 2回 LoadLibrary してましたというオチですね判ります
398デフォルトの名無しさん
2020/11/15(日) 16:26:04.91ID:e/1XaXi9 ズコー
LoadLibraryをAPIHookしちゃおうぜ
LoadLibraryをAPIHookしちゃおうぜ
399デフォルトの名無しさん
2020/11/15(日) 18:00:54.67ID:18uzJ+HT 長文で申し訳ない。
396
自分しか使っていないDLLであることは間違い無いので・・・とりあえず現状で
すすめる感じ。動いてるからOKは無能感アリアリです。リファレンスカウント
を追いかける事もできるようですが、沼入間違いなし。もし3回目が発生したら
ワーニング出してるので、報告してもらいます。ありがと。フックの時、DLLイン
スタンスを与えてるので、その時、参照が追加されるのかな、などと妄想するわけ
です。
297
判りますか!・・・さすがです。あおりでないと思ってマジレス。
ユーザの起因でLoadLibraryが2回実行される可能性として思い当たるのが:
1.メインプロセスが終了していないうちにデバグなどで再度起動しちゃった。
2.LoadLibrary呼び出しのの箇所をプログラムカウンタが2回通過している。
辺りでしょうか。1は、多重起動が排除されていて、かつタスクマネジャにも出て
いないので可能性が低い。2は、ブレークポイントとprintf()でモニタしてて多分
ないかなぁ。他アドバイスありましたらよろしくお願いいたしますm(_ _)m。
398
LoadLibraryをフックして、どのタイミングで呼び出されるのかを理解する感じ
ですか?APIフックかぁ・・・経験値が足りないのでハマりそうだなぁ。thx。
396
自分しか使っていないDLLであることは間違い無いので・・・とりあえず現状で
すすめる感じ。動いてるからOKは無能感アリアリです。リファレンスカウント
を追いかける事もできるようですが、沼入間違いなし。もし3回目が発生したら
ワーニング出してるので、報告してもらいます。ありがと。フックの時、DLLイン
スタンスを与えてるので、その時、参照が追加されるのかな、などと妄想するわけ
です。
297
判りますか!・・・さすがです。あおりでないと思ってマジレス。
ユーザの起因でLoadLibraryが2回実行される可能性として思い当たるのが:
1.メインプロセスが終了していないうちにデバグなどで再度起動しちゃった。
2.LoadLibrary呼び出しのの箇所をプログラムカウンタが2回通過している。
辺りでしょうか。1は、多重起動が排除されていて、かつタスクマネジャにも出て
いないので可能性が低い。2は、ブレークポイントとprintf()でモニタしてて多分
ないかなぁ。他アドバイスありましたらよろしくお願いいたしますm(_ _)m。
398
LoadLibraryをフックして、どのタイミングで呼び出されるのかを理解する感じ
ですか?APIフックかぁ・・・経験値が足りないのでハマりそうだなぁ。thx。
400デフォルトの名無しさん
2020/11/15(日) 18:03:54.84ID:pziaxEZW >>395
FreeLibrary()は何回呼び出して何回目でゼロが返ってきてるの?
FreeLibrary()は何回呼び出して何回目でゼロが返ってきてるの?
401デフォルトの名無しさん
2020/11/15(日) 18:54:05.48ID:18uzJ+HT 400さん、レスありがとう。実際のコードはi値の制限などもちっと複雑なので
すが、感じとしては、WinMainに以下のように記されています。
1: i=0;
2: for(;;) {
3: i++;
4: ret=FreeLibrary(dllinst);
5: if(res==0) {
6: n=GetLastError();
7: break;
8: }
9: }
場合によるのですが、ループを出た時のi値は2か3を示します。nは126です。
i値が2になるケース、3になるケースは、初回投稿 >>379 に示してあります。
フックの初回呼び出しにリファレンスが追加・・・かなぁ(妄想。
すが、感じとしては、WinMainに以下のように記されています。
1: i=0;
2: for(;;) {
3: i++;
4: ret=FreeLibrary(dllinst);
5: if(res==0) {
6: n=GetLastError();
7: break;
8: }
9: }
場合によるのですが、ループを出た時のi値は2か3を示します。nは126です。
i値が2になるケース、3になるケースは、初回投稿 >>379 に示してあります。
フックの初回呼び出しにリファレンスが追加・・・かなぁ(妄想。
402デフォルトの名無しさん
2020/11/15(日) 19:40:59.29ID:pziaxEZW >>401
4でretなのに5でresなのは誤字かな?
4でretなのに5でresなのは誤字かな?
403デフォルトの名無しさん
2020/11/15(日) 19:54:35.90ID:pziaxEZW というか>>379でいうと
> 3: ...あれやこれやの処理...
ここに原因があるってことでしょ
そこ次第じゃないの?
> 3: ...あれやこれやの処理...
ここに原因があるってことでしょ
そこ次第じゃないの?
404デフォルトの名無しさん
2020/11/15(日) 20:18:38.41ID:qoaGDZ/5 まず>>379の1の直前・直後での山椒カウンターから調べてみるとか
405デフォルトの名無しさん
2020/11/15(日) 20:46:59.18ID:ALi3WLRE LoadLibraryの参照カウンタって簡単に取れたっけ?
昔DDKのヘッダ持ってきてゴニョゴニョやった気がする。
しかもwin7と8以降で構造体定義が違ったり。
昔DDKのヘッダ持ってきてゴニョゴニョやった気がする。
しかもwin7と8以降で構造体定義が違ったり。
406デフォルトの名無しさん
2020/11/15(日) 20:52:47.67ID:gutimSe2 成功するまで n回 FreeLibraryを試みて LoadLibrary しなおす?
ATTACH と DETACH が副作用おこすかもだけど
ATTACH と DETACH が副作用おこすかもだけど
407デフォルトの名無しさん
2020/11/15(日) 21:30:45.30ID:18uzJ+HT みなさん、こんな漠然とした質問に答えてくださってありがとう。
404さん、405さん。参照カウンタの取得は、現象の理解に役に立つとは思います
が・・・なにぶん日曜プログラマなものですから。
google先生 「win32api how to get dll reference count」
でめぼしい情報はPEB(Process environment block)のLDR_MODULE構造体がう
んちゃらで(マト違い?)、ハードルの高さを感じました。
406さん。おっしゃる通りです。ユーザーのコード内でLoadLibraryが1度だけ
呼ばれるのだけど、参照カウンタが2になっている点は重要と認識しています。
3になるかもしれないし、いつ増えるかも妄想の範囲を出ません。FreeLibrary
するループ内で参照カウンタが変化かもとかゾッとします。
というわけで、今のところ警告を出して他の現象も集めてみたいと思っています。
が、人に使ってもらうレベルでは、参照カウンタの振る舞いは押さえておかないと
いけないという認識です。
404さん、405さん。参照カウンタの取得は、現象の理解に役に立つとは思います
が・・・なにぶん日曜プログラマなものですから。
google先生 「win32api how to get dll reference count」
でめぼしい情報はPEB(Process environment block)のLDR_MODULE構造体がう
んちゃらで(マト違い?)、ハードルの高さを感じました。
406さん。おっしゃる通りです。ユーザーのコード内でLoadLibraryが1度だけ
呼ばれるのだけど、参照カウンタが2になっている点は重要と認識しています。
3になるかもしれないし、いつ増えるかも妄想の範囲を出ません。FreeLibrary
するループ内で参照カウンタが変化かもとかゾッとします。
というわけで、今のところ警告を出して他の現象も集めてみたいと思っています。
が、人に使ってもらうレベルでは、参照カウンタの振る舞いは押さえておかないと
いけないという認識です。
408デフォルトの名無しさん
2020/11/15(日) 21:38:16.46ID:18uzJ+HT 追記:
LoadLibraryが2度呼ばれてましたとかいうオチの時は、正直に詫びを入れることを
お約束いたします。いやマジで、ユーザーコード全部で記述は1ヶ所だけし、2回通っ
てないし(大汗。
LoadLibraryが2度呼ばれてましたとかいうオチの時は、正直に詫びを入れることを
お約束いたします。いやマジで、ユーザーコード全部で記述は1ヶ所だけし、2回通っ
てないし(大汗。
409蟻人間 ◆T6xkBnTXz7B0
2020/11/15(日) 21:50:53.68ID:Ixphny8D LoadLibraryしたライブラリの名前は何ですか?
410デフォルトの名無しさん
2020/11/15(日) 22:22:34.55ID:18uzJ+HT exeと同じディレクトリに置かれたtmp.dllという名前です。DLLによっては、
参照が増える可能性があるということでしょうか。私が書いたコードですが中
身はほぼ空っぽです。たまにデバグやモニタの為にprintfします。コピペで手
加工のためtypoしてたらごめんなさい。
* tmpdll.cppの中身
01: BOOL APIENTRY DllMain(
02: HINSTANCE hinst,
03: DWORD reason,
04: LPVOID rsv
05: ) {
06: switch (reason) {
07: case DLL_PROCESS_ATTACH:
08: DisableThreadLibraryCalls(hinst);
09: break;
10: case DLL_PROCESS_DETACH:
11: break;
12: case DLL_THREAD_ATTACH:
13: break;
14: case DLL_THREAD_DETACH:
15: break;
16: default:
17: break;
18: }
19: return TRUE;
20: }
* コンパイルコマンド:
>cl.exe /LD tmpdll.cpp User32.lib
>move tmpdll.dll tmp.dll
すいませんが、今日はもうレスできません。作業は停滞から抜け出れてますので、
どうかヒマつぶし程度の軽い気持ちで受け答えください(大汗。
参照が増える可能性があるということでしょうか。私が書いたコードですが中
身はほぼ空っぽです。たまにデバグやモニタの為にprintfします。コピペで手
加工のためtypoしてたらごめんなさい。
* tmpdll.cppの中身
01: BOOL APIENTRY DllMain(
02: HINSTANCE hinst,
03: DWORD reason,
04: LPVOID rsv
05: ) {
06: switch (reason) {
07: case DLL_PROCESS_ATTACH:
08: DisableThreadLibraryCalls(hinst);
09: break;
10: case DLL_PROCESS_DETACH:
11: break;
12: case DLL_THREAD_ATTACH:
13: break;
14: case DLL_THREAD_DETACH:
15: break;
16: default:
17: break;
18: }
19: return TRUE;
20: }
* コンパイルコマンド:
>cl.exe /LD tmpdll.cpp User32.lib
>move tmpdll.dll tmp.dll
すいませんが、今日はもうレスできません。作業は停滞から抜け出れてますので、
どうかヒマつぶし程度の軽い気持ちで受け答えください(大汗。
411デフォルトの名無しさん
2020/11/15(日) 23:47:17.82ID:+e2tZbOG 参照カウントは、読み込んだ・実行した回数と関係ないだろ。
複数のプロセスから、参照されていれば、2 以上になるだけだろ
自分が参照すれば1で、
OS も参照すれば、2じゃないの?
自分で参照回数を、0にすべきじゃない。
OSが使っているかも知れないし
OSが何をやっているのか、勉強していない香具師は、妙な事を考えない方がよい。
OSの勉強だけで、何十年も掛かるから
複数のプロセスから、参照されていれば、2 以上になるだけだろ
自分が参照すれば1で、
OS も参照すれば、2じゃないの?
自分で参照回数を、0にすべきじゃない。
OSが使っているかも知れないし
OSが何をやっているのか、勉強していない香具師は、妙な事を考えない方がよい。
OSの勉強だけで、何十年も掛かるから
412デフォルトの名無しさん
2020/11/16(月) 00:11:34.75ID:o4udgoJm ウイルス対策ソフトによる介入まで考えたらさらに増える。
413デフォルトの名無しさん
2020/11/16(月) 00:34:28.20ID:QRq3yxwv >>411
ここで言ってるのはプロセス内の話だぞ?
LoadLibraryを2回やったらFreeLibraryも2回呼ばなきゃならんという話。
>OSが何をやっているのか、勉強していない香具師は、妙な事を考えない方がよい。
ここで言ってるのはプロセス内の話だぞ?
LoadLibraryを2回やったらFreeLibraryも2回呼ばなきゃならんという話。
>OSが何をやっているのか、勉強していない香具師は、妙な事を考えない方がよい。
414411
2020/11/16(月) 01:24:18.28ID:9JpVGitI DLL を2回も呼ぶのか?
一々、DLLをロードしてから、フリーするとか、
そんなに厳密に、メモリを気にしなくても良いのでは?
初心者は、そんな些末な事に、時間を掛けるべきじゃないと思う。
どうせ、1MB とか、ほぼ64 bit では無意味な節約だろ
そういうのを気にしていたら、Ruby などでプログラミングできない。
皆、富豪プログラミングなのにw
一々、DLLをロードしてから、フリーするとか、
そんなに厳密に、メモリを気にしなくても良いのでは?
初心者は、そんな些末な事に、時間を掛けるべきじゃないと思う。
どうせ、1MB とか、ほぼ64 bit では無意味な節約だろ
そういうのを気にしていたら、Ruby などでプログラミングできない。
皆、富豪プログラミングなのにw
415デフォルトの名無しさん
2020/11/16(月) 01:34:45.83ID:X7NjX7T3 411は何も解ってない
416デフォルトの名無しさん
2020/11/16(月) 03:56:24.82ID:+pimEm7D LoadLibraryの参照カウンタはプロセス単位
質問者はDLL_PROCESS_ATTACHが複数回呼ばれると思ってるようだが複数回LoadLibraryしても呼ばれるのは最初の1回だけ
質問者はDLL_PROCESS_ATTACHが複数回呼ばれると思ってるようだが複数回LoadLibraryしても呼ばれるのは最初の1回だけ
417デフォルトの名無しさん
2020/11/16(月) 08:05:49.89ID:cFXcINFw おはようさん。ゆるくいってもらえるとうれしい。
413さん。LoadLibraryを複数回呼べば参照カウンタはそれだけ増えます。
その場合、増えた原因がLoadLibraryと明らかなので特に問題ないと考えます。
わからないのはLoadLibraryが1度のつもりなのに、場合によって一つ増える
現象が不思議だなってあたり。
414さん。まったくその通りです。実際、削除してみたいというのは今のところ
技術的な興味だけで、参照カウンタの増加原因がコードのどの部分なのかが
わかれば自分が面白いという点だけです。対応策は削除しない策も含めて2、3
考えていて重大ではなくなっています。時間がもったいないですね。
461さん。アプリケーションが起動されたプロセスで、DLL_PROCESS_ATTACH
はLoadLibraryの時に1度、DLL_PROCESS_DETACHはFreeLibraryにより参照カ
ウンタが0になった時に1度だけです。このように理解していますが^^;。
参照カウンタはプロセス毎に持っていて、自プロセスのFreeLibraryが2回成功
するということは、自プロセスの参照カウンタが2になっていると考えていま
す。他のプロセスがtmp.dllをロードしても、自プロセスの持つ参照カウンタは
増えません。予想の範囲をでませんが、自分の書いたコードの中のあるAPI関数
が参照カウンタを増やしている、たぶん初回のフックプロシジャ起動の時に増え
てるっぽい。ですので、現象を正しく理解するには、結局の所、参照カウンタを
モニタして増減のポイントを押さえ、可否を判断するのが本道かなとも思います
・・・難しそうですよね。APIは勝手に参照カウンタ増やすよ?なんてアドバイ
スがあると、よかったのですが。
長文でくどくなって、イラついている人がいそうですね。この辺で、一度この話
題から私は離れたいと思います。アドバイスくださった方がた、どうもありがと
うございました。
413さん。LoadLibraryを複数回呼べば参照カウンタはそれだけ増えます。
その場合、増えた原因がLoadLibraryと明らかなので特に問題ないと考えます。
わからないのはLoadLibraryが1度のつもりなのに、場合によって一つ増える
現象が不思議だなってあたり。
414さん。まったくその通りです。実際、削除してみたいというのは今のところ
技術的な興味だけで、参照カウンタの増加原因がコードのどの部分なのかが
わかれば自分が面白いという点だけです。対応策は削除しない策も含めて2、3
考えていて重大ではなくなっています。時間がもったいないですね。
461さん。アプリケーションが起動されたプロセスで、DLL_PROCESS_ATTACH
はLoadLibraryの時に1度、DLL_PROCESS_DETACHはFreeLibraryにより参照カ
ウンタが0になった時に1度だけです。このように理解していますが^^;。
参照カウンタはプロセス毎に持っていて、自プロセスのFreeLibraryが2回成功
するということは、自プロセスの参照カウンタが2になっていると考えていま
す。他のプロセスがtmp.dllをロードしても、自プロセスの持つ参照カウンタは
増えません。予想の範囲をでませんが、自分の書いたコードの中のあるAPI関数
が参照カウンタを増やしている、たぶん初回のフックプロシジャ起動の時に増え
てるっぽい。ですので、現象を正しく理解するには、結局の所、参照カウンタを
モニタして増減のポイントを押さえ、可否を判断するのが本道かなとも思います
・・・難しそうですよね。APIは勝手に参照カウンタ増やすよ?なんてアドバイ
スがあると、よかったのですが。
長文でくどくなって、イラついている人がいそうですね。この辺で、一度この話
題から私は離れたいと思います。アドバイスくださった方がた、どうもありがと
うございました。
418デフォルトの名無しさん
2020/11/16(月) 08:26:01.14ID:bJvdDL6U 自発的なdllの削除ってなると >>412 の件は厄介かもな
419411
2020/11/16(月) 09:50:44.37ID:9JpVGitI Windows は、クローズドOS だから、何をやってるか分からない
ファイルをロックするためにとか、メモリから追い出されないために、
参照回数を増加させるかも知れない
だから、自分が1回しか呼んでいなのなら、参照回数を2回減らしてはいけない。
2回減らしても、無視されるだけかも知れないけど
自分が増やした分だけを、減らすべき!
ファイルをロックするためにとか、メモリから追い出されないために、
参照回数を増加させるかも知れない
だから、自分が1回しか呼んでいなのなら、参照回数を2回減らしてはいけない。
2回減らしても、無視されるだけかも知れないけど
自分が増やした分だけを、減らすべき!
420デフォルトの名無しさん
2020/11/16(月) 12:14:15.53ID:Hr3Y8q39 なんか参照カウントと単なるカウンタが入り乱れてそうな流れ
421デフォルトの名無しさん
2020/11/16(月) 12:21:40.31ID:sF1WJXNT 全部読まずにresするが
元々自分のexeの依存dllにそのdllを入れちゃってるのに
さらにLoadLibraryしてるとかかな
元々自分のexeの依存dllにそのdllを入れちゃってるのに
さらにLoadLibraryしてるとかかな
422デフォルトの名無しさん
2020/11/16(月) 20:18:45.97ID:kmoq+Q7j DLLのコードもあるなら別にDLLで無くてもいいのではと思ってしまうw
423デフォルトの名無しさん
2020/11/24(火) 20:44:41.98ID:/h51r/r1424デフォルトの名無しさん
2020/11/26(木) 18:31:15.60ID:ryn8MPPQ どうなってんの?
void ListView_GetItemCount(
hwnd
);
https://docs.microsoft.com/en-us/windows/win32/api/commctrl/nf-commctrl-listview_getitemcount
void ListView_GetItemCount(
hwnd
);
https://docs.microsoft.com/en-us/windows/win32/api/commctrl/nf-commctrl-listview_getitemcount
425デフォルトの名無しさん
2020/11/26(木) 19:21:32.18ID:+pStE+xj 普通そういう時はメッセージの方見るよね
426デフォルトの名無しさん
2020/11/26(木) 19:21:58.33ID:AZoEWn7U 言語的お作法
427デフォルトの名無しさん
2020/11/26(木) 19:47:30.99ID:35iFwdoe マクロだし
428デフォルトの名無しさん
2020/11/26(木) 20:19:49.68ID:ryn8MPPQ なんか滅茶苦茶だな
古いMSDNライブラリ2008ではshellコントロールもCE5.0も正しい定義が出てる
メンテ止めても表示崩す必要無いだろに...
https://docs.microsoft.com/en-us/previous-versions/windows/embedded/aa453326(v=msdn.10)
久々にapi使ってコード書こうかと思ったがガックリだわ
古いMSDNライブラリ2008ではshellコントロールもCE5.0も正しい定義が出てる
メンテ止めても表示崩す必要無いだろに...
https://docs.microsoft.com/en-us/previous-versions/windows/embedded/aa453326(v=msdn.10)
久々にapi使ってコード書こうかと思ったがガックリだわ
429デフォルトの名無しさん
2020/11/27(金) 18:59:42.70ID:Iha9xPer ListView_GetItemCount
Retrieves the number of items in a list-view control. You can use this macro or send the LVM_GETITEMCOUNT message explicitly.
int ListView_GetItemCount(
HWND hwnd
);
Parameters
hwnd
Handle to the list-view control.
Return Values
Returns the number of items.
Retrieves the number of items in a list-view control. You can use this macro or send the LVM_GETITEMCOUNT message explicitly.
int ListView_GetItemCount(
HWND hwnd
);
Parameters
hwnd
Handle to the list-view control.
Return Values
Returns the number of items.
430デフォルトの名無しさん
2020/11/27(金) 20:15:59.56ID:k8xXZ238 エラーの詳細を取得するには、関数を使います。
431デフォルトの名無しさん
2020/12/08(火) 15:48:41.35ID:jRmhdWmE なぜですか?
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13212452128
質問者からのお礼コメント
小学生でもわかるような回答ではなく、なぜそうなのかも回答できないと社会人として微妙ですよ。
わかる箇所だけ答えるのはニワカです。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13212452128
質問者からのお礼コメント
小学生でもわかるような回答ではなく、なぜそうなのかも回答できないと社会人として微妙ですよ。
わかる箇所だけ答えるのはニワカです。
432デフォルトの名無しさん
2020/12/12(土) 17:55:49.91ID:UcE3yZq1 浣腸電灯めりくり
433デフォルトの名無しさん
2020/12/13(日) 17:26:48.55ID:/mwshU+q AllocConsoleでコンソールを開いてそこからstdio.hのscanfしたいのですが、
ノンブロッキングではないので呼び出し側が固まってしまいます。
そこでscanf的な機能をもつノンブロッキングな関数をつくりたい。
FILE_FLAG_OVERLAPPEDでCONIN$を開いてReadFileで読むまではいいのですが
ReadFileしていない間の入力もバッファリングしてしまいます。そういう機能だから当然ですが。
このバッファリングをうまくオンオフする方法、もしくはバッファを棄てる方法はないでしょうか?
それともFILE_FLAG_OVERLAPPEDではない別の方法があるのでしょうか?
ノンブロッキングではないので呼び出し側が固まってしまいます。
そこでscanf的な機能をもつノンブロッキングな関数をつくりたい。
FILE_FLAG_OVERLAPPEDでCONIN$を開いてReadFileで読むまではいいのですが
ReadFileしていない間の入力もバッファリングしてしまいます。そういう機能だから当然ですが。
このバッファリングをうまくオンオフする方法、もしくはバッファを棄てる方法はないでしょうか?
それともFILE_FLAG_OVERLAPPEDではない別の方法があるのでしょうか?
434デフォルトの名無しさん
2020/12/13(日) 17:32:24.33ID:cAYsSKhI 読み込んだ文字列をsscanf
435デフォルトの名無しさん
2020/12/13(日) 17:35:08.88ID:/mwshU+q CONIN$を開いたハンドルをCloseHandleで閉じたりFlushFileBuffersしたりは試しました。
436デフォルトの名無しさん
2020/12/13(日) 17:37:07.75ID:/mwshU+q■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否★4 [夜のけいちゃん★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★4 [蚤の市★]
- 中国側が首相答弁の撤回要求、日本側拒否★5 [夜のけいちゃん★]
- 「厚かましい挑発的発言だ」中国国連大使が高市首相発言に強く反発 日本の常任理事国入りに明確に反対 [ぐれ★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★6 [ぐれ★]
- 解体ごみ約2.3トンを山に不法投棄か トルコ国籍解体工を逮捕 埼玉 [どどん★]
- でも高市早苗がセックス外交したら逆転ホームランあるよな [695089791]
- 【悲報】高市早苗さん、たった一人で日本を崩壊へ導く [714769305]
- 【悲報】「やったー!こだわりまくった洋館仕立ての家を建てたぞ!」➡「「離婚したんで住まずに売ります……」 [158478931]
- 精神する時の🏡
- 【悲報】ファブル「━━━書かれた文面を読むだけの岸田と違って、高市は決断力や行動力があり、自分で責任を取れる。 [257926174]
- 【悲報】高市総理モノマネにとろサーモン久保田がブチギレ。「しょーもない。高市さんは頑張ろうとしてるやろ」😮 [518915984]
