問題タブ [com-interop]
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.
.net - 「メモリリーク」の構造
.NETの観点では:
- メモリリークとは何ですか?
- アプリケーションがリークしているかどうかをどのように判断できますか?効果は何ですか?
- どうすればメモリリークを防ぐことができますか?
- アプリケーションにメモリリークがある場合、プロセスが終了するか強制終了されると、メモリリークはなくなりますか?または、アプリケーションのメモリリークは、プロセスの完了後でもシステム上の他のプロセスに影響を与えますか?
- また、COM相互運用機能やP/Invokeを介してアクセスされるアンマネージコードについてはどうでしょうか。
excel - VBA for Excel または Access プロジェクトで VisualBasic-Express のクラスを使用するにはどうすればよいですか?
VB-Express コードを .dll として保存し、それを regasm に登録して、.tlb ファイルを作成しました。
しかし、Excel モジュールで関数を実行しようとすると、「実行時エラー '453': kernel32 で DLL エントリ ポイント RegisterServiceProcess が見つかりません」というエラーが表示されます。
私が見逃したステップは何ですか?
interop - Interop アセンブリでコード カバレッジ分析を取得することは可能ですか?
MSDN フォーラムでもこの質問をしましたが、解決策が見つかりませんでした。
http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3686852&SiteID=1
ここでの基本的な問題は、相互運用アセンブリには、インストルメント化できる IL が実際には含まれていないことです (おそらくいくつかのデリゲートを除く)。そのため、相互運用レイヤーを実行するテスト プロジェクトをまとめることはできますが、実際に呼び出しているメソッドとプロパティの数を把握することはできません。
プラン B は、RCWW (Runtime Callable Wrapper Wrappers) のライブラリを作成するコード ジェネレーターを作成し、コード カバレッジの目的でそれを計測することです。
編集:@Franci Penov、
はい、それはまさに私がやりたいことです。私たちに提供された COM コンポーネントは、約を含む数十の DLL のライブラリを構成します。3000種類。ライブラリを提供するグループが最小限のテストを行うため、アプリケーションでそのライブラリを使用し、その相互運用層をテストする責任があります。コード カバレッジにより、すべてのインターフェイスとコクラスが確実に実行されるようになります。それが私がやろうとしているすべてです。独自のマネージド コードを実行する別のテスト プロジェクトがあります。
はい、理想的には、COM サーバー チームが独自のコードをテストおよび分析する必要がありますが、私たちは理想的な世界に住んでおらず、彼らの作業に基づいて高品質の製品を提供する必要があります。コード インターフェイスの 80% をテストし、そのうちの 50% が宣伝どおりに機能しないことを示すテスト レポートを作成できれば、回避策の問題ではなく、修正が必要な場所で修正を行うことができます。
あなたが言及したモック レイヤーは便利ですが、最終的に相互運用レイヤー自体をテストするという目標を達成することはできません。私は確かにそれを手作業で維持したくありません。インターフェイスへの変更の。
上で述べたように、次のステップは、ラッパーのラッパーを生成し、テスト目的でそれらを計測することです。
winforms - アプリケーションのシャットダウン時に、モードレス VB6 アプリケーションはどのようにクリーンアップを行うことができますか?
VB6 アプリケーションは、Interop Forms Toolkit を使用して、.NET で記述されたフォームを操作しています。ツールキットのドキュメントでは、ツールキットのメソッドを呼び出して、VB6 アプリケーションのシャットダウン時にツールキットに通知することを推奨しています。
VB6 アプリケーションは、スプラッシュ スクリーンをロードする Sub Main プロシージャを使用してから、いくつかのモードレス フォームを表示します。Sub Main が完了すると、アプリケーションはまだ実行されています。アプリケーションがシャットダウン中であることを検出し、Toolkit で cleanup メソッドを呼び出すにはどうすればよいですか?
.net - 混合管理/非管理プロセスで CCW と RCW をダンプする
マネージド/アンマネージド環境 (Visual Studio と ReSharper) が混在しており、CCW または RCW リークが疑われます。現在割り当てられているすべてのラッパーをダンプして、ソース/ターゲットを特定する方法はありますか? WinDbg、SOS、SOSEx があるので、!syncblk コマンドで RCW と CCW の合計数を確認できます。私はただオブジェクトを見たいだけなので、オブジェクトに対して !gcroot を呼び出して、そうでなければ容疑者を調べることができます。
c# - Excel 相互運用オブジェクトを適切にクリーンアップするにはどうすればよいですか?
私は C# で Excel 相互運用機能を使用しており ( ApplicationClass
)、finally 句に次のコードを配置しました。
この種の作業は機能しExcel.exe
ますが、Excel を閉じた後でもプロセスはバックグラウンドにあります。アプリケーションが手動で閉じられた場合にのみ解放されます。
私は何を間違っていますか、または相互運用オブジェクトが適切に破棄されるようにするための代替手段はありますか?
c# - C# または F# から IMetaDataEmit およびその他の MetaData COM インターフェイスにアクセスするにはどうすればよいですか?
F# でコンパイラを作成しており、.net ランタイムでアンマネージ メタデータ COM インターフェイスにアクセスできるようにしたいと考えています。誰かが言及する前に、Reflection.Emit は私の目的には適しておらず、メタデータ COM インターフェイス以外の方法を使用したくありません。
mscoree.tlb をインポートしましたが、必要なインターフェイスが含まれていないようです。
私が興味を持っているインターフェイスには、IMetaDataEmitが含まれます。これに関連するサンプル コードは非常に役に立ちますが、これまでのところ見つけることができませんでした。
C# のサンプルは、F# に簡単に変換できるので問題ありません。
このやや不可解なクエリで私を助けることができる人に前もって感謝します!
更新:インターフェイス GUID を使用して明示的な COM 参照を記述することで、これを並べ替えました。
c# - Windows で使用可能な COM インターフェイスの一覧を取得する方法
GUID を使用して、Windows マシンに登録されている COM インターフェイスのリストを取得する方法はありますか?
これがプログラミングに関係ないと思われる前に、tlbimp が公開していないインターフェイスの F# (または C#) で COM インターフェイスを参照するには、このデータが必要です。
.net - Excel アプリケーションがセル編集モードかどうかを確認する方法は?
.net の COM Interop を使用して Excel アドインを作成しています。ダイアログをポップアップするコマンドがあり、ダイアログから、いくつかのシートの使用範囲からデータを収集するなどの作業を行います。問題は、セルが編集モードの場合、必要な呼び出しの一部で例外がスローされることです。最初にセルの編集を終了するようにユーザーに警告できるように、Excel が編集モードであることを事前に判断する方法が必要です。
何か案は?
c# - .NET COM 相互運用メソッドの署名
次の COM メソッドにどの相互運用署名を使用しますか? 特に最後の 2 つのパラメーターと、a を使用するかどうかに関心がありMarshalAs
ますSizeParamIndex
。
ドキュメントの状態:
pValue [out] 値を含むバイト バッファーへのポインター。NULL を渡して、必要なバッファーの長さを取得します。
pcbLength [in, out] 入力では、pValue の長さを含む変数へのポインター。出力では、変数には使用された pValue のバイト数が含まれます。