問題タブ [safehandle]

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 に答える
1689 参照

c# - FileStream.SafeFileHandle を使用した後、GC.KeepAlive() の呼び出しを削除しても安全ですか?

最近使用するように変更した次のコードを検討してくださいFileStream.SafeFileHandle

Windows API呼び出しが返さGC.KeepAlive(fs)れるまで FileStream がガベージ コレクションされないようにするために、以前に を追加していました。WriteFile()

ただし、SafeFileHandleコード分析を使用するように変更した後、次の場合は不要であることがわかりましたwarning CA2004: Remove calls to GC.KeepAlive

SafeHandle の使用法に変換する場合は、GC.KeepAlive (オブジェクト) へのすべての呼び出しを削除します。

のドキュメントを参照しましたFileStream.SafeFileHandleが、 への呼び出しを削除しても本当に安全かどうかは不明ですGC.KeepAlive()

削除しても安全ですか?そして、私はそれを正しく使用していますか?

また、SafeHandle の使用に関する適切なドキュメントを教えてくれる人はいますか?

0 投票する
2 に答える
299 参照

c# - SafeHandle の invalidHandleValue の目的は何ですか?

SafeHandleコンストラクinvalidHandleValueター. IsInvalidとにかく実装する必要がある場合、それは何に使用されますかどのメンバ変数がポインタを保持しているかがわからないため[メンバー変数が実装されているとは知りませんでしたhandle]?

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

f# - F# で SafeHandles を使用する

プラットフォーム呼び出しを使用する F# コードを使用しています。私が使用している API の 1 つは、ハンドルを返します。を使用する代わりにnativeint、独自の SafeHandle (具体的にSafeHandleMinusOneIsInvalidは .) を実装しました。これにより、pinvoke 署名を含むモジュールの操作が少し面倒になります。次に例を示します。

モジュールとクラスが相互に再帰的に参照するため、これはコンパイルされません。これは機能しません。モジュールを上に移動するMySafeHandleGetHandle、SafeHandle が表示されません。

MySafeHandleF# の extern メソッドはモジュール内にある必要があるように見えるため、プラットフォーム呼び出しメソッドを内部に移動することはできません(コンパイラーはそれらをクラスに入れようとするのを止めませんが)。

また、F# の再帰型は、モジュールとクラスの間では機能せず、クラスの間では機能しないようです。

2 つの異なるモジュールを宣言する必要のないこの問題の解決策はありますか? 理想的には、すべてのプラットフォーム呼び出しコードを 1 つのモジュールにまとめたいと考えています。

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

c# - pinvoke/アンマネージ コードを適切に破棄する方法

ac dll を pinvoke する必要があるコードがあります。このコードは、アンマネージ コードに触れるため、idisposible を実装する必要があるように思えます。間違っているかもしれないので、間違っていたら訂正してください。

内容を読んでみると、セーフハンドルを使用する必要があるようです。偉大な。私のdllがハンドルまたはintptrを返さないことを除いて。んで、どうする?

署名は主に次のようなものです。

引数の値:

pTripID: 新しい Trip ハンドルが配置される 4 バイト整数へのポインター

そこにセーフハンドルを押し込む方法はありますか?この記事の難しいケースのようです。

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

c# - Win32 構造体 (PROCESS_INFORMATION) をマーシャリングするときのセーフ ハンドル

SafeHandle通常のIntPtrハンドルの代わりにクラスを使用するように Win32 p/invoke コードを変換中です。

メソッド シグネチャではすべてがうまく機能しますDllImportが、Win32 構造体 (つまり ) をマーシャリングするときにそれらを機能させることはできませんPROCESS_INFORMATION

ProcessSafeHandleとクラスはまたはのThreadSafeHandleようなメソッドで問題なく動作しますが、上記のような Win32 構造体では使用できません。ReadProcessMemoryWriteProcessMemory

ある種の注釈マジックが欠けていますか?