問題タブ [interlocked-increment]

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.

0 投票する
1 に答える
57 参照

vba - VBA kernel32 InterlockedIncrement は 64 ビット ホストでは使用できません。どうすればよいですか?

一部のコードを 32 ビット VBA から 64 ビット VBA にアップグレード中です。InterlockedIncrement 関数を使用します。

これは、以前は kernel32 によってエクスポートされていましたが、x86 呼び出し元に対してのみです。64 ビット Excel から実行するのはそれほど単純ではありません。「 kernel32 で DLL エントリ ポイント InterlockedIncrement が見つかりません」というエラーが表示されます。理由は次のとおりです。

64 ビット ウィンドウでは、これらは実際の関数ではありません [...] 代わりにコンパイラの組み込み関数です。その関数を P/Invoking するコードは、Interlocked マネージ クラスを使用する必要があります。

良い代替手段は何ですか/これを修正できますか?


コンテキストとして、InterlockedIncrement と InterlockedDecrement を使用して COM 参照カウントを行うSO のこの回答からコードを更新しています。これらの Interlocked 関数は、マルチスレッドにとって重要なアトミック操作であることを理解しましたが、VBA はシングル スレッド アパートメントで実行されるため、気にする必要はありますか? this.refCount = this.refCount + 1十分ですか?コードは私の頭の少し上にあるので、これらの機能を忘れてバグが発生しないと 100% 確信することはできませんが、いずれかの方法でお知らせください。