問題タブ [com-port]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
vba - COMポートの非同期(オーバーラップ)Kernel32.dll ReadFileによってVBAバッファがデータで満たされていないが、同期的に動作する
オーバーラップ モードで kernel32.dll ReadFile 関数を使用して、シリアル COM ポートから非同期に VBA を読み取る際に発生している問題について、誰かが何らかの洞察を持っているのではないかと思っています。
基本的に、すべてが機能しますが、COM ポートの場合のみ、ReadFile に渡されたデータ バッファーがデータでいっぱいになることはありませんが、GetOverlappedResults は、正しい文字数が読み取られ、非同期 (オーバーラップ) 操作が正常に完了したことを示します。
奇妙な点は、COM ポートと同期して動作し、(COM ポートではなく) ファイルと非同期で動作し、ReadFile が呼び出される前に COM ポート データが利用可能な場合は非同期で動作することです (この場合、同期的に完了します)。
それがどのように動作するかを誤解していないことをテストするために、古き良き C で同じコードを書いたところ、完全に動作しました。データ バッファーは期待どおりにいっぱいになりますが、VBA コードではデータ バッファーは受信したデータでいっぱいになりません。
私はこの問題を何日にもわたってさまざまな方法で検討してきましたが、前進するために次に何をすべきかわかりません。
これは、問題を示す非常に基本的なものに要約された私の単純な VBA コードです。
VBA がバッファを不揮発性として扱っているように感じられるため、VBA はバッファが自発的に変化する可能性があることを知りません。
見たい人がいれば、類似の C コードを投稿できます。
ご協力いただきありがとうございます。
D