デバッグ出力: clientcore\windows\advcore\ctf\shellhandwriting\client\handwritingclient.cpp(287)\Msctf.dll!77A3FC28: (caller: 77A345FD) LogHr(3) tid(988) 8007007E 指定されたモジュールが見つかりません。

Delphiでプログラムを書いて実行(F9)すると、必ずこれが・・・。

さんざん、悩みましたが、
ようやく原因と解決方法がわかりました。

【もくじ】

1.再発
2.Copilotさんが言うには・・・
3.ViVeToolをダウンロードして実行
4.まとめ
5.お願いとお断り

1.再発

以前、こちらの記事で「問題は解決した」と書きましたが、OSからクリーン・インストールし直したPCで同じ現象が・・・いつの間にか、また発生するようになり・・・


この内部エラーだけは再現してくれなくても、全然イイんだけど。ほんとに・・・ T_T

だって、解決策の糸口もつかめないから。

それに、なんで再発すんの???

Msctf.dllをキーワードにGoogle先生にお伺いをたてても全然埒があかないし・・・

その前の handwritingclient.cpp ? 手書きクライアント? MyPCにそんなアプリあった?

アルワケナイ。

ってか、拡張子が cpp って、コレ、C++のファイルでしょ?

オレ、C++ いじった記憶ないんだけど・・・

確かに一昨年、手書き文字認識にハマって、Pythonのいろんなライブラリを扱ったけど、でもあれはSDカードや外付けのSSDにインストールしたWinPythonに入れたはずで・・・。

しかも、MyPCは23年12月にOSからクリーン・インストール。
溜まってた余計なモノはきれいさっぱり、消えたはず・・・。

もう、何がどうして、こうなるのか・・・

自分にはどうすることもできないと、ほとんどあきらめかけていたのですが、ふと、Win11の23H2から使えるようになった生成AI、Copilot(プレビュー)が、いつも、とても良いアドバイスをしてくれることを思い出し、・・・ひょっとしたら・・・問題解決のヒントを教えてくれるかも・・・と、突然、思えてきて。

こんなイイコトに、なんで今まで気がつかなかったんだろー。

2.Copilotさんが言うには・・・

さっそく、訊いてみました!(同じ内容をGoogle先生に訊ねると画像が9枚紹介されて、おしまい)
キーワードはそのものズバリ。

clientcore\windows\advcore\ctfshellhandwriting\client\handwritingclient.cpp(296)がエラーになる理由は?

単刀直入に、いちばん、知りたいコトを入力して、Enter。

Copilotさんは、しばらく、考え(検索し)ているようでしたが、やがて驚くべき返答が☆

(返答はそのまま載せたらいけないらしいので要約です)

『エラーは、Windowsの新しい「シェル手書き」機能(MTestAbSh1, 41799415)のバグに関連している可能性あり』

で、

『ViVeToolを使えば当該機能が有効になっているか・どうかを確認できる』

とのこと。まぁ 状況から考えて、MyPCでは絶対!有効になってると思うし、それより・・・。

ViVeTool(ビーブツール)ってナンだか、さっぱりわかんないけど、

Copilotさん、すごすぎます!

さらに、「詳細情報」として stackoverflow.com の記事へのリンクを示してくれました。
こちらがその記事です。

MSCTF.dll complains ‘An assertion failure has occurred’

https://stackoverflow.com/questions/77556770/msctf-dll-complains-an-assertion-failure-has-occurred

以下、リンク先記事の要約です。

(1)原因は、現在実験段階にある新しい「シェル手書き」機能(MTestAbSh1、41799415)のバグ。
(2)ViVeToolをダウンロードして、機能が有効になっているかどうかを確認。
(3)確認コマンドは、「vivetool /query /id:41799415」
(4)機能が有効であった場合に無効化するコマンドは、「vivetool /disable /id:41799415」
(5)機能を無効に設定したら、システムを再起動する。

完璧すぎ。これこそ知りたかった究極の解決策。問題の解答そのものです!!

リンク先記事の質問の回答者様に心から感謝。

Copilotさん、ありがとう!

3.ViVeToolをダウンロードして実行

【ダウンロード】

さらにCopilotさんは「ViVeToolとは何か?」についても教えてくれました☆
以下、その要約です。

(1)ViVeToolは、Windowsの隠し機能を有効化・無効化できるサードパーティ製のツール。
(2)Windows Insiderでも利用できない機能を有効にしたいときに使用する。
(3)ViVeToolを使えば、Windows 11の新機能(隠し機能)を公開前に使用できる。

そぉなんだー♪

私自身は、別に公開前でなくてもかまいませんから、安定した機能を安心・安全に使いたいだけですが、すごいToolがあるんですね。ほんと、びっくり!!です。

で、ViVeToolのダウンロード先と、使い方の詳細は・・・(こちらも要約)

(1)GitHub からzipファイルをダウンロード。
(2)ダウンロードしたzipファイルを展開。
(3)コマンドプロンプトを起動、ViVeToolのフォルダーに移動
   ↑
  管理者として実行する(じゃないと有効状態の確認はできても、設定の変更ができない)

(4)ViVeToolコマンドを実行

もちろん実行するコマンドは、機能が有効であるか確認するための「vivetool /query /id:41799415」と、有効であった場合にそれを無効化する「vivetool /disable /id:41799415」です。

ViVeToolのダウンロードは、こちら

ViVeTool v0.3.3

https://github.com/thebookisclosed/ViVe/releases/tag/v0.3.3

【実行】

手順通りにViVeToolをダウンロード&展開(解凍)して、コマンドプロンプトを管理者権限で実行(真実はちょっと違って、最初は普通にコマンドプロンプトを呼び出して、問題の機能が有効であることを確認。続けて無効化しようとしたら、エラーに。T_T )

なので再度、コマンドプロンプトを管理者権限で起動して、上記コマンドを実行し、問題の機能の無効化に成功。

以下、問題の機能の状態を確認&無効化作業時、MyPCのコマンドプロンプトに表示された内容です。
※ 赤字は、状態の確認と機能の無効化のコマンド

【コマンドプロンプト】※ 管理者として実行します!

Microsoft Windows [Version 10.0.22631.3007]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\System32>cd \

C:\>cd C:\Users\XXX\Downloads\ViVeTool-v0.3.3

C:\Users\XXX\Downloads\ViVeTool-v0.3.3>vivetool /query /id:41799415
ViVeTool v0.3.3 - Windows feature configuration tool

[41799415]
Priority        : Service (4)
State           : Enabled (2)
Type            : Experiment (1)

C:\Users\XXX\Downloads\ViVeTool-v0.3.3>vivetool /disable /id:41799415
ViVeTool v0.3.3 - Windows feature configuration tool

Successfully set feature configuration(s)

C:\Users\XXX\Downloads\ViVeTool-v0.3.3>

で、Successfullyの表示を信じ、祈るような気持ちでシステムを再起動。
これでダメなら、イチから出直しです。

・・・

Delphiを起動。現在、開発中のプロジェクトを読み込んで、実行(F9)。

【結果】

スレッドの開始 : スレッド ID: 30832. プロセス XXX.exe (32324)
プロセスの開始: C:\Users\XXX\Win32\Release\XXX.exe. ベースアドレス: $004E0000. プロセス XXX.exe (32324)
モジュールの読み込み: XXX.exe. デバッグ情報あり. ベースアドレス: $004E0000. プロセス XXX.exe (32324)
モジュールの読み込み: ntdll.dll. デバッグ情報なし. ベースアドレス: $77890000. プロセス XXX.exe (32324)
モジュールの読み込み: KERNEL32.dll. デバッグ情報なし. ベースアドレス: $75990000. プロセス XXX.exe (32324)
モジュールの読み込み: KERNELBASE.dll. デバッグ情報なし. ベースアドレス: $77560000. プロセス XXX.exe (32324)
モジュールの読み込み: apphelp.dll. デバッグ情報なし. ベースアドレス: $74550000. プロセス XXX.exe (32324)
モジュールの読み込み: COMDLG32.dll. デバッグ情報なし. ベースアドレス: $76290000. プロセス XXX.exe (32324)
スレッドの開始 : スレッド ID: 15468. プロセス XXX.exe (32324)
モジュールの読み込み: msvcp_win.dll. デバッグ情報なし. ベースアドレス: $75D70000. プロセス XXX.exe (32324)
スレッドの開始 : スレッド ID: 21404. プロセス XXX.exe (32324)
モジュールの読み込み: ucrtbase.dll. デバッグ情報なし. ベースアドレス: $76BD0000. プロセス XXX.exe (32324)
スレッドの開始 : スレッド ID: 30816. プロセス XXX.exe (32324)
モジュールの読み込み: combase.dll. デバッグ情報なし. ベースアドレス: $75A80000. プロセス XXX.exe (32324)
モジュールの読み込み: WINSPOOL.DRV. デバッグ情報なし. ベースアドレス: $70E00000. プロセス XXX.exe (32324)
モジュールの読み込み: WINMM.dll. デバッグ情報なし. ベースアドレス: $74600000. プロセス XXX.exe (32324)
モジュールの読み込み: d3d9.dll. デバッグ情報なし. ベースアドレス: $66C20000. プロセス XXX.exe (32324)
モジュールの読み込み: RPCRT4.dll. デバッグ情報なし. ベースアドレス: $76E70000. プロセス XXX.exe (32324)
モジュールの読み込み: msvcrt.dll. デバッグ情報なし. ベースアドレス: $75760000. プロセス XXX.exe (32324)
モジュールの読み込み: SECHOST.dll. デバッグ情報なし. ベースアドレス: $77250000. プロセス XXX.exe (32324)
モジュールの読み込み: SHCORE.dll. デバッグ情報なし. ベースアドレス: $77330000. プロセス XXX.exe (32324)
モジュールの読み込み: SHCORE.dll. デバッグ情報なし. ベースアドレス: $01BF0000. プロセス XXX.exe (32324)
モジュールの読み込み: bcrypt.dll. デバッグ情報なし. ベースアドレス: $76CF0000. プロセス XXX.exe (32324)
モジュールの読み込み解除 : SHCORE.dll. プロセス XXX.exe (32324)
モジュールの読み込み: USER32.dll. デバッグ情報なし. ベースアドレス: $76F30000. プロセス XXX.exe (32324)
モジュールの読み込み: GDI32.dll. デバッグ情報なし. ベースアドレス: $755C0000. プロセス XXX.exe (32324)
モジュールの読み込み: win32u.dll. デバッグ情報なし. ベースアドレス: $77400000. プロセス XXX.exe (32324)
モジュールの読み込み: win32u.dll. デバッグ情報なし. ベースアドレス: $01740000. プロセス XXX.exe (32324)
モジュールの読み込み解除 : win32u.dll. プロセス XXX.exe (32324)
モジュールの読み込み: SHLWAPI.dll. デバッグ情報なし. ベースアドレス: $772E0000. プロセス XXX.exe (32324)
モジュールの読み込み: gdi32full.dll. デバッグ情報なし. ベースアドレス: $758A0000. プロセス XXX.exe (32324)
モジュールの読み込み: SHELL32.dll. デバッグ情報なし. ベースアドレス: $76350000. プロセス XXX.exe (32324)
モジュールの読み込み: dwmapi.dll. デバッグ情報なし. ベースアドレス: $71030000. プロセス XXX.exe (32324)
モジュールの読み込み: COMCTL32.dll. デバッグ情報なし. ベースアドレス: $74070000. プロセス XXX.exe (32324)
モジュールの読み込み: OLEAUT32.dll. デバッグ情報なし. ベースアドレス: $754F0000. プロセス XXX.exe (32324)
モジュールの読み込み: ADVAPI32.dll. デバッグ情報なし. ベースアドレス: $755F0000. プロセス XXX.exe (32324)
モジュールの読み込み: ole32.dll. デバッグ情報なし. ベースアドレス: $76D10000. プロセス XXX.exe (32324)
モジュールの読み込み: VERSION.dll. デバッグ情報なし. ベースアドレス: $74B00000. プロセス XXX.exe (32324)
モジュールの読み込み: WTSAPI32.dll. デバッグ情報なし. ベースアドレス: $74AD0000. プロセス XXX.exe (32324)
モジュールの読み込み: dxcore.dll. デバッグ情報なし. ベースアドレス: $690D0000. プロセス XXX.exe (32324)
モジュールの読み込み: IMM32.dll. デバッグ情報なし. ベースアドレス: $75590000. プロセス XXX.exe (32324)
モジュールの読み込み: MSCTF.dll. デバッグ情報なし. ベースアドレス: $77150000. プロセス XXX.exe (32324)
モジュールの読み込み: UxTheme.dll. デバッグ情報なし. ベースアドレス: $73FF0000. プロセス XXX.exe (32324)
モジュールの読み込み: AppCore.dll. デバッグ情報なし. ベースアドレス: $748E0000. プロセス XXX.exe (32324)
モジュールの読み込み: bcryptPrimitives.dll. デバッグ情報なし. ベースアドレス: $770E0000. プロセス XXX.exe (32324)
モジュールの読み込み: WINSTA.dll. デバッグ情報なし. ベースアドレス: $747D0000. プロセス XXX.exe (32324)
モジュールの読み込み: gdiplus.dll. デバッグ情報なし. ベースアドレス: $6ED10000. プロセス XXX.exe (32324)
スレッドの開始 : スレッド ID: 32320. プロセス XXX.exe (32324)
モジュールの読み込み: TextShaping.dll. デバッグ情報なし. ベースアドレス: $6D760000. プロセス XXX.exe (32324)
モジュールの読み込み: CLBCatQ.DLL. デバッグ情報なし. ベースアドレス: $75670000. プロセス XXX.exe (32324)
モジュールの読み込み: MMDevAPI.DLL. デバッグ情報なし. ベースアドレス: $5BA00000. プロセス XXX.exe (32324)
モジュールの読み込み: DEVOBJ.dll. デバッグ情報なし. ベースアドレス: $74690000. プロセス XXX.exe (32324)
モジュールの読み込み: CFGMGR32.dll. デバッグ情報なし. ベースアドレス: $06450000. プロセス XXX.exe (32324)
モジュールの読み込み: CFGMGR32.dll. デバッグ情報なし. ベースアドレス: $06490000. プロセス XXX.exe (32324)
モジュールの読み込み解除 : CFGMGR32.dll. プロセス XXX.exe (32324)
モジュールの読み込み: CFGMGR32.dll. デバッグ情報なし. ベースアドレス: $74650000. プロセス XXX.exe (32324)
モジュールの読み込み解除 : CFGMGR32.dll. プロセス XXX.exe (32324)
モジュールの読み込み: AudioSes.DLL. デバッグ情報なし. ベースアドレス: $5B870000. プロセス XXX.exe (32324)
スレッドの開始 : スレッド ID: 11740. プロセス XXX.exe (32324)
モジュールの読み込み: python39.dll. デバッグ情報なし. ベースアドレス: $79C60000. プロセス XXX.exe (32324)
モジュールの読み込み: WS2_32.dll. デバッグ情報なし. ベースアドレス: $76230000. プロセス XXX.exe (32324)
モジュールの読み込み: VCRUNTIME140.dll. デバッグ情報なし. ベースアドレス: $79C40000. プロセス XXX.exe (32324)
モジュールの読み込み: CRYPTSP.dll. デバッグ情報なし. ベースアドレス: $71F20000. プロセス XXX.exe (32324)
モジュールの読み込み: RSAENH.dll. デバッグ情報なし. ベースアドレス: $71EC0000. プロセス XXX.exe (32324)
モジュールの読み込み: CRYPTBASE.dll. デバッグ情報なし. ベースアドレス: $74540000. プロセス XXX.exe (32324)
モジュールの読み込み: TextInputFramework.dll. デバッグ情報なし. ベースアドレス: $6E6A0000. プロセス XXX.exe (32324)
モジュールの読み込み: CoreMessaging.dll. デバッグ情報なし. ベースアドレス: $63E10000. プロセス XXX.exe (32324)
モジュールの読み込み: CoreUIComponents.dll. デバッグ情報なし. ベースアドレス: $63B70000. プロセス XXX.exe (32324)
モジュールの読み込み: WinTypes.dll. デバッグ情報なし. ベースアドレス: $74D30000. プロセス XXX.exe (32324)
モジュールの読み込み: OLEACC.dll. デバッグ情報なし. ベースアドレス: $6ECB0000. プロセス XXX.exe (32324)
モジュールの読み込み: tophdll.dll. デバッグ情報なし. ベースアドレス: $5BE70000. プロセス XXX.exe (32324)
スレッドの開始 : スレッド ID: 14212. プロセス XXX.exe (32324)
スレッドの開始 : スレッド ID: 31268. プロセス XXX.exe (32324)

エラーは完全に消えました!

でも、長かったなー。
解決できる気は『まったくしなかった』し、
解決できたのは、ほんとに偶然だったけど・・・

もしかしたら、同じ問題で悩んでいる人が、この世界のどこかに・・・

解決策がここにあります。
届け、このメッセージ!

そう思って、これを書いています。

4.まとめ

(1)Windows11には、隠し機能があって、しかもそれは有効な状態だったりする。
(2)GitHubから入手できるViVeToolを使えば、その有効/無効を確認できる。
(3)当該機能が有効である場合は、同ツールで無効化できる。
(4)有効状態を無効化した場合は、システムの再起動が必要。

Win11の隠し機能と、Delphiのコンパイラとの関係は謎のままですが・・・。Msctf.dllを読み込む設定だと、そこで問題が起きるのかな? みたいな・・・

5.お願いとお断り

このサイトの内容を利用される場合は、自己責任でお願いします。ここに記載した内容を利用した結果、利用者および第三者に損害が発生したとしても、このサイトの管理者は一切責任を負えません。予め、ご了承ください。