問題タブ [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 - C# P/Invoke での C++ "string" クラスのマーシャリング
次のように定義されたネイティブ DLL に関数があります。
これを Microsoft の P/Invoke Interop Assistant に入れようとしましたが、「文字列」クラス (MFC からだと思いますか?) でチョークします。
さまざまな異なる型 (C# String、char[]、byte[]) としてマーシャリングを試みましたが、毎回 NotSupportedException または Native Assembly Exception を取得します (マーシャリングを試みたかによって異なります)。
ネイティブ文字列クラスが使用されているネイティブ/マネージド相互運用機能を行ったことがある人はいますか? これをマーシャリングする方法はありますか?独自のマーシャラーを作成する必要がありますか?
c# - Excel 相互運用オブジェクトを適切にクリーンアップするにはどうすればよいですか?
私は C# で Excel 相互運用機能を使用しており ( ApplicationClass
)、finally 句に次のコードを配置しました。
この種の作業は機能しExcel.exe
ますが、Excel を閉じた後でもプロセスはバックグラウンドにあります。アプリケーションが手動で閉じられた場合にのみ解放されます。
私は何を間違っていますか、または相互運用オブジェクトが適切に破棄されるようにするための代替手段はありますか?
.net - ランタイム呼び出し可能ラッパー (RCW) スコープ - プロセスまたはアプリケーション ドメイン?
アンマネージ COM オブジェクトを参照するときのランタイム呼び出し可能ラッパー (RCW) のスコープは何ですか? ドキュメントによると:
ランタイムは、そのオブジェクトに存在する参照の数に関係なく、COM オブジェクトごとに正確に 1 つの RCW を作成します。
「推測」しなければならない場合、この説明は「プロセスごとに1つ」を意味するはずですが、それは本当ですか? 追加のドキュメントは大歓迎です。
私のアプリケーションは独自のアプリケーション ドメイン (Outlook アドイン) で実行されます。カウントが 0 になるまでループで Marshal.ReleaseComObject(x) を使用するとどうなるかを知りたいです (推奨)。他のアドイン (同じ Outlook プロセス内の他のアプリケーション ドメインで実行されているもの) から参照を解放しますか?
編集:パーフェクト - 今、混乱はさらに大きくなっています。2 つの回答 (Lette と Ilya から) に基づいて、2 つの異なる回答があります。MSDNの公式ドキュメントにはプロセスごと (ver. 2.0 以降の場合) と書かれていますが、ver. 2.0 以降ではこの文がありません。ドキュメントの1.1。
同時に、Mason Bendixen の記事では、それは appdomain ごとであると述べています。
彼の記事は古い (2007 年 4 月) ため、明確化を求めるメールを彼に送信しましたが、他の誰かが何かを追加する必要がある場合は、追加してください。
ありがとう
xml - ビジネス文書の交換 (請求書、PO など) に使用するのに最適な標準は何ですか?
システムからシステムへのビジネス ドキュメント (請求書、PO、送金通知など) の送受信を実装する必要がある場合、最適な相互運用のためにどの標準をお勧めしますか? また、その理由は何ですか? それは XML であっても、それ以外であってもかまいません。
c# - c# Excel 相互運用を学習するためのリソース
C# で Excel の相互運用をすばやく開始して実行するのに役立つリソースは何ですか?
.net - 相互運用コントロールで app.config を使用する
app.config を使用する .net プロジェクト (MySolution.Common) があります。MySolution.InteropCtrl という名前の InteropUserControl プロジェクトでプロジェクト MySolution.Common を使用しています。MySolution.InteropCtrl は VB6 プロジェクトに組み込まれています。MySolution.InteropCtrl が VB6 プロジェクトにある場合、app.config ファイルが見つかりません。app.config ファイルの情報に依存するものを除いて、InteropControl のすべてが VB6 で機能します。VB6 で MySolution.InteropCtrl が app.config ファイルを参照できるようにするには、何を変更する必要がありますか?
.net - app.config ファイルを使用する .net 相互運用プロジェクトを持つ VB6 プロジェクトをデバッグするにはどうすればよいですか?
app.config ファイルを使用する .net 相互運用プロジェクトがあります。デバッグ モードで相互運用コントロールを使用している VB6 プロジェクトを実行しているときに、ConfigurationManager が app.config ファイルを見つけることができません。VB6 プロジェクトを exe にし、app.config ファイルの名前を (VB6 バイナリ名).exe.config に変更すると、ConfigurationManager はファイルを見つけることができます。
VB6 がデバッグ モードで実行されているときに ConfigurationManager が app.config ファイルを見つけられるように、app.config ファイルの名前を変更するか、設定を変更する方法はありますか?
wpf - タスク ペインで使用すると、WPF ComboBox が開いたままにならない
WPF Interop と Excel アドインに奇妙なバグがあります。私は.Net 3.5 SP1を使用しています。
Add-in Express を使用して、Excel 2003 のカスタム タスク ペインを作成しています。そのタスクペイン内で、ElementHost を使用して WPF UserControl をホストしています。UserControl には、TextBox と ComboBox を含む Grid が含まれているだけです。私の問題は、すべてが正しく表示されている間、下矢印の上にマウスを置いたままにしない限り、ComboBox がドロップダウンのままにならないことです。
Excel で WPF ウィンドウをモードレスで表示しようとしたときに同様の問題が発生したため、これが必ずしも Add-in Express に関連しているとは思いません。
2 つ目の問題は、ComboBox がフォーカスを放棄するのをためらっているように見えることです。クリックすると、テキスト領域が灰色になり、フォーカスがあることを示しますが、ウィンドウ内の他の場所にフォーカスを移動することはできません。フォーカスを奪う唯一の方法は、マウスホイールを動かすことです。
他の誰かが同様の問題を抱えていて、それを修正できましたか?
asp.net - ASP.NET セッションと、COM 相互運用を使用するオブジェクトの格納
私はasp.net Webサイトに取り組んでいます。従来の vb6 ActiveX コンポーネントとやり取りするには、com 相互運用機能を使用する必要があります。多くの場合、コンポーネントはコンテキスト オブジェクト (それ自体が vb6 activex コンポーネント) をパラメーターとして受け取ることに依存しています。コンテキスト オブジェクトの構築にはかなりのコストがかかります。
したがって、1 つのアイデアは、コンテキスト オブジェクトを一度構築し、asp.net セッションに格納することです。ただし、このオブジェクトが ActiveX コンポーネントの単なる .net ラッパーである場合、そのようなオブジェクトをセッションで永続化することは賢明であり、賢明でしょうか?
さらに、コンテキスト オブジェクトにはユーザー固有の情報が含まれているため、.net HttpRuntime キャッシュを使用した永続化を使用できますが、ユーザー固有のキーが必要になります。
asp.net session, aspnet-session questionで注意する必要があるその他の制限と事項を理解しています。
少し異なる方法で質問するには、com オブジェクトの単なるラッパーである .net オブジェクトを格納する際の問題または問題はありますか?
c# - C++ 構造体配列を C# にマーシャリングする
私はC++で次の構造体を持っています:
そして、これらの構造体の 3 つの配列を取得するために p/invoking している関数:
C++ では、次のようにします。
それは問題なく動作しますが、C# では動作しないようです。次のような C# 構造体を作成しました。
そして、それらのうちの 3 つの配列 (およびそのすべてのサブ配列) を初期化し、これに渡すと:
成功して戻りますが、LPRData 配列のデータは変更されていません。
LPRData の 3 つのサイズの生のバイト配列を作成し、それを次のような関数プロトタイプに渡すことさえ試みました。
GetData (バイト [] データ);
しかし、その場合、最初の LPRData 構造から「データ」文字列を取得しますが、同じ LPRData からの「prob」配列を含め、その後は何も取得しません。
これを適切に処理する方法のアイデアはありますか?