問題タブ [unmanagedresources]

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 投票する
4 に答える
933 参照

c# - TcpClient を使用するクラスにファイナライザーを実装する必要がありますか?

オブジェクトを使用する(プライベートフィールドとして持つ)クラス(たとえばMyClass)がありTcpClientます。メソッドでの呼び出しをMyClass実装します。IDisposableTcpClient.CloseDispose

私の質問は、呼び出し元のコードによって呼び出されない場合に備えて、アンマネージ リソースを解放するMyClassために呼び出すファイナライザーも実装する必要がありますか?Dispose(bool Disposing)TcpClient’sMyClass.Dispose

ありがとう

0 投票する
3 に答える
480 参照

unmanagedresources - 管理されていないdllコード

C / C ++で記述されたアンマネージ32ビットライブラリを使用するC#(.NET 3.5、VS2005 Professional)アプリケーションを使用しています。私が使用するAPIは次のようなものです。

void * Initialize(int x);

voic GetData(void *);

これは、Windows XP 32ビットで実行すると機能しますが、WindowsXP64ビットでは例外がスローされます。

未処理の例外:System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。---> System.BadImageFormatException:不正な形式のプログラムを読み込もうとしました。(HRESULTからの例外:0x8007000B)Aktuelizator.CommonLibrary.InitializeRingBuffer(Int32 dim)at Aktuelizator.AktuelizatorWService.AktuelizatorWS..ctor()

これらのアンマネージDLLは、32ビットから呼び出されたときに64ビットXPで動作し、C /C++で記述されたアプリケーションをアンマネージします。

誰かが何か考えを持っていますか?

0 投票する
5 に答える
415 参照

.net - USING文を使うべきケース一覧

「File と Font は、アンマネージド リソース (この場合はファイル ハンドルとデバイス コンテキスト) にアクセスするマネージド型の例です。他にも多くの種類のアンマネージド リソースとそれらをカプセル化するクラス ライブラリ型があります。そのような型はすべて、IDisposable インターフェイスを実装する必要があります。ルールとして、IDisposable オブジェクトを使用する場合は、using ステートメントで宣言してインスタンス化する必要があります。」-MSDN

USING ステートメントを使用する必要がある場合 (FILE や FONT などのアンマネージド リソースにアクセスするマネージド型) のリストはありますか?

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

unmanagedresources - 接続オブジェクト、コマンド オブジェクト、datareader、dataadapter などのデータベース関連のオブジェクトは、管理されていないリソースですか?

接続オブジェクト、コマンド オブジェクト、datareader、dataadapter などのデータベース関連のオブジェクトは、管理されていないリソースですか?

0 投票する
3 に答える
2345 参照

c# - c# から C++ で記述された DLL からカスタム型を呼び出す

C# プロジェクトで c++ で記述された DLL を使用しています。このコードを使用して、DLL 内で関数を呼び出すことができました。

ここで、カスタム型ポインターを必要とする関数を呼び出す必要があります。DLL レイアウトのドキュメントは、次のように機能します。

このカスタム ポインターの使用方法がわかりません。これは DLL で定義されていますか? もしそうなら、C#プロジェクトからどのように使用できますか? そうでない場合は、ヘッダー ファイルを C# に含める必要がありますか? よろしくお願いします。

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

c# - 管理されていないdllのバージョンを取得するC#

マネージドc#コードからアンマネージドdllを呼び出しており、正しいバージョンを呼び出していることを確認したいと思います。

アセンブリをロードしようとしているコード(リソースファイルを取得してからバージョンを取得するため)は次のとおりです。cur_version= Assembly.LoadFile( "X:\ Workspace \ yreceipts_pos \ yRprintProcessor \ Debug \ yRprintProcessor.dll"); このエラーが原因で失敗しています: The module was expected to contain an assembly manifest. (Exception from HRESULT: 0x80131018)

誰かがこれを回避する方法を知っていますか、またはマネージドc#コードからアンマネージドdllのバージョンをチェックするためのより良い方法がありますか?

よろしくお願いします、リチャード

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

c# - C# のアンマネージ C コード 参照文字列配列によるマーシャリング!

このマーシャリングをダウンさせるのに本当に苦労しています。

次のような umanaged コードがあります。

参考までに、私はこのアンマネージ コードを作成していませんが、使用する必要があります。

戻り値: エラーを示す WORD。

DevNames: char 配列の配列へのポインター。基本的に、変更されて返される文字列の配列です!

Max_Len: 各文字列の長さ (これは 256 でなければならないと言われています)

Max_Num: 配列の長さ。デバイスの数を教えてくれる別の Invoke 呼び出しを使用しているので、送信する文字列の数が正確にわかります。

私は P/Invoke interop signatureToolkit を使用して、これについて多くのことを理解しましたが、さらに多くのことを理解するためにたくさん読んだこともあります。私が今いる場所はここです:

私は自分のコードを次のように呼び出します。

文字列は変更できないため、新しい文字列を返すことができるように、文字列ビルダーを変更するアンマネージ コードが必要なため、文字列ビルダー配列を使用しています。

コードを実行すると、私の配列は変更されていません!

何が起こっているのかよくわかりませんが、配列をその場で変更せず、代わりに新しい参照(ポインター)を作成するようにアンマネージコードに指示するCLRと関係があると思います。これが事実であっても、それを修正する方法がわかりません。

誰でも提供できる洞察に感謝します!

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

c# - リソースが確実に破棄されるように、Marshal.FreeHGlobal を finally ブロックに配置する必要がありますか?

次のコードブロックがあります。

ブロックを try でラップし、FreeHGlobal コマンドを finally ブロックに配置する必要があります。(中間コマンドが例外をスローした場合)。

この場合、最終的にメモリリークを防ぐのは理にかなっているようですが、オンラインで見つけた例から、最終的には使用されていません。いずれにせよ、リソースは自動的に破棄される可能性があります (管理されていない場合でも)。

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

c# - ポインターとして渡されるアンマネージ型の C++/CLI 配列

私の質問は、 cli/C++ から問題を持ち越します。アンマネージ型要素で cli::array を定義する方法は?

アンマネージド型のマネージド配列を作成するには、そのポインターを提供する必要があることを理解しています。

この配列をパラメーターを期待するネイティブ関数に送信したい場合、どうすればconst UserType*よいでしょうか?

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

c# - プロセスのすべてのリソースを解放するにはどうすればよいですか?

ファイルを作成してそのファイルを使用するプロセスを実行しています。そのプロセスの終了後、私はそのファイルを削除しています。

その間に何らかの例外が発生した場合、ファイルがプロセスによって解放されたかどうかを知る方法と、ファイルがプロセスによってロックされている場合にファイルを削除する方法。

助けてくれてありがとう:)