問題タブ [managed-code]
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.
c# - キーワードと Managed\UnManaged コードの使用
C# キーワード Using は、アンマネージ リソースを解放するメカニズムを提供する Idisposable を実装します。
今、私はこのコードを実行していました
なぜこのコードでキーワードUsingが使用されているのに、 StreamReaderはマネージ リソースであり、ガベージ コレクターはそのスコープを超えた後にオブジェクト メモリを解放する責任があるのでしょうか。
だから私の質問は、
- 上記のコードは、単にリソースを解放するための明示的な処理方法ですか?
- 私の理解によると、.net フレームワークで使用するメソッドまたはクラスはマネージド コードであり、StreamReader もマネージド コードに分類されません。
- Managed\Unmanaged コードに何か不足していますか?
c# - マネージド コードとアンマネージド コードの間の境界として BSTR 文字列を渡す (COM 相互運用)
com interop に取り組んでいる間、このリンクのチュートリアルに従いました。要件に応じていくつかの変更を行ったため、コードは正常に動作しますが、文字列の処理中に問題が発生します。ここでは境界として BSTR 文字列を使用しています。ここに私がC++から呼び出しているC#の関数があります
ここに、呼び出しが行われているコードの C++ メイン関数セクションがあります
私が直面している問題は次のとおりです。
- C# で戻り関数を使用しているにもかかわらず、C++ コードから渡された後、BSTR 文字列がコンソールに返されない
- ここでSysAllocString("")を使用しているため、コンソールに動的に入力を挿入することは可能ですか?
c# - C++ アプリケーションを使用して C# DLL を使用するためのラッパー クラスを設計するにはどうすればよいですか?
次のチュートリアルhttps://www.red-gate.com/simple-talk/dotnet/net-development/creating-ccli-wrapper/に従って、C# .NET フレームワーク コンソールから C++ スタティック ライブラリのインスタンスを作成しました。ラッパー クラスを使用するアプリケーション。このチュートリアルでは、ManagedObject.h ファイルは、アンマネージドからマネージドへのラッパー クラスのテンプレートを作成します。マネージドからアンマネージドに移行するテンプレートを作成するにはどうすればよいですか? これが不可能な場合は、C# DLL から C++ アプリケーションで使用されるラッパー クラスを作成するためのリンクを教えてください。
c# - マネージ コードはコンパイル後に生成されますか?
注: 別のMSDNドキュメントと矛盾しているように見えるMSDNドキュメントに出くわした後、私の現在の理解が正しいかどうかを明確にしたいだけです。また、私はすでに次のリンクを通過しています-
私は次のことを理解していました(このリンクを通過した後に開発しました):
マネージ コード: 高水準言語 (C#、F# などの .NET 上で実行できる) のいずれかで記述されたコードは、コンパイル時に IL を生成し、その実行はランタイム (この場合は CLR、 Mono、.NET Framework、.NET Core/.NET 5+ などの実装に関係なく、マネージ コードと呼ばれます。
IL: マネージ コードをコンパイルした製品です。
しかし、その後、このリンクに出くわしました。それによると、マネージ コードにコンパイルするとき、コンパイラはソース コードを Microsoft 中間言語 (MSIL) に変換します...など。
両方のドキュメントは MSDN からのものであり、タイプミスであるかどうかわからないため、質問です。
それで、どれが正しいですか?