問題タブ [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 CCW アセンブリを取得して dll.config から構成を読み込む方法
CCW (Com Callable Wrapper) として公開され、アンマネージ IIS アプリケーション (ATL サーバー) に読み込まれる.NET コンポーネントがあります。アセンブリがインストールされ、.com を使用して COM に登録されregasm /codebase
ます。
コンポーネントには、IIS アプリの Web.config ファイルに通常配置されるような構成が必要です。しかし、構成を w3pw.exe.config または machine.config にドロップしたくありません。理想的には、COM に公開されているアセンブリと一緒に構成をライブでインストールしたいと考えています。
私はこれを達成する方法を見つけていません。COM アセンブリは既定の AppDomain に読み込まれるため、そのドメインを別の場所から読み込むように構成することはできないと思います。
c# - VBScript から常に .NET コンポーネントのインデクサーにアクセスできるとは限らないのはなぜですか?
COM 相互運用機能を介して VBScript (クラシック ASP) からアクセスしている .NET アセンブリがあります。1 つのクラスには、次の属性をインデクサーに追加することで VBScript から動作するようになったインデクサー (別名既定のプロパティ) があります[DispId(0)]
。ほとんどの場合は機能しますが、別のオブジェクトのメンバーとしてクラスにアクセスする場合は機能しません。
次の構文で動作させるにはどうすればよいですか:どこで Member にインデクサーがありますか (組み込みの:Parent.Member("key")
の既定のプロパティにアクセスするのと同様です)?Request.QueryString
Request.QueryString("key")
私の場合、デフォルトのインデクサーを持つを返すプロパティをTestRequest
持つ親クラスがあります。QueryString
IRequestDictionary
VBScript の例:
次の行は、「値」を出力する代わりにエラーを引き起こします。これは私が働きたい構文です:
Microsoft VBScript ランタイム (0x800A01C2)
引数の数が間違っているか、プロパティの割り当てが無効です: 'QueryString'
ただし、次の行はエラーなしで機能し、期待される「値」を出力します (最初の行は一時変数の既定のインデクサーにアクセスすることに注意してください)。
以下は、C# 2.0 の簡略化されたインターフェイスとクラスです。それらは次の方法で登録されていますRegAsm.exe /path/to/AspObjects.dll /codebase /tlb
:
さまざまなオプションを調査および実験してみましたが、まだ解決策が見つかりません。testRequest.QueryString("key")
構文が機能しない理由と、それを機能させる方法を理解するための助けをいただければ幸いです。
注: これは、COM Interop を介してインデクサー / デフォルト プロパティを公開するのフォローアップです。
更新: これは、タイプ ライブラリから生成された IDL の一部です ( oleviewを使用):
msbuild - nant スクリプトを使用して msbuild を実行し、アセンブリを登録する際の問題は何ですか?
NAnt スクリプトから MSBuild を実行しています。アセンブリの 1 つを に登録しようとするとcom interop
、スクリプトがスタックしたように停止します。
regasm.exe
アセンブリで実行すると、成功します。まったく同じパラメーターを使用してコマンドラインから MSBuild 自体を実行しても、正常にビルドされます。
NAnt スクリプトを使用して MSBuild を実行し、アセンブリを登録する際の問題は何ですか? それは許可でしょうか?
windows - マネージド コードでシェルから Vista/Windows Search/propsys.dll プロパティを取得する
誰かがこれを行うことができましたか?IPropertyStore のマネージ ラッパー クラスを作成しようとしましたが、PROPVARIANT へのポインターを受け取るメソッド (IPropertyStore::GetValue) で AccessViolationExceptions を取得しています (マネージ バージョンで MarshalAs(UnmanagedType.Struct) 出力パラメーターとしてレンダリングされます) おそらく私の理解COM と相互運用性が不十分です --- PROPVARIANT 構造体宣言に問題があるかどうかはわかりません (現在、StructLayout.Sequential を使用し、バイトのシーケンスを宣言し、バイトを手動で操作して、さまざまな型の値を取得しています)ユニオンなど)、どのプロセスが何を所有しているか、または何か他のものをCOMが発行します。ユニオンに StructLayout.Explicit を使用するなど、他のさまざまなバージョンの PROPVARIANT を試しましたが、何も機能しませんでした。IPropertyStore:: による PROPERTYKEY の取得
.net - COM から参照を追加できません
ウィンドウ/アセンブリ ディレクトリから Microsoft.Office.Interop.Excel を選択できません。そこにあることはわかりますが、それを参照するオプションはありません。どうすれば選択できますか?
.net - Entlib と相互運用性: 動作しますか? 構成ファイルはどこに保存されますか?
COM相互運用に登録されているdllの.netコード内でEntLib 3.1を使用しようとしています。設定ファイルはどこに置くのですか?
または、dll コード内で entlib 構成を取得する場所を指定する方法はありますか? 私のdllはCOMから呼び出されるため、どのexeがそれを呼び出すかは常にわかりません。
「CallingApp」と「MyComThing」の 2 つのクラスを持つ entlib Logging を使用する単純なアプリを作成しました。CallingApp から MyComThing のメソッドを呼び出すと、CallingApp の構成ファイルの構成を使用してログに記録されます。MyComThing のメソッドを vbs スクリプトから、つまり COM を介して呼び出すと、「ログの構成セクションが構成ソースに見つかりません」というエラーが表示されます。私の COMThing.dll.config ファイルは、登録された COMThing.dll と同じフォルダ、つまり bin\debug\ フォルダにあります。
ありがとう!
c# - .NETからCOMに公開されたアセンブリをテストすることは可能ですか?
tlbファイルを介してCOMに公開した.NETアセンブリと、tlbを登録するインストーラーがあります。インストーラーが正しく機能し、COMクライアントがライブラリにアクセスできることを手動で確認しました。ここまでは順調ですね...
ただし、インストーラーが正しく機能していることを確認する自動システムテストをまとめようとしています。その一環として、VMへのインストールを自動化しました。次に、インストールされたCOMライブラリを呼び出して、正しく機能していることを確認します。私はもともとVB6でいくつかのテストを書くことを考えていましたが、.NETアセンブリを参照するC#で書かれたテストの大規模なスイートをすでに持っています。.tlbを参照するようにこれらを変更できることを期待していましたが、VS2008内でこれを試してみると、エラーが発生します。
ActiveXタイプライブラリ'blah.tlb'は.NETアセンブリからエクスポートされたため、参照として追加できません。
おそらくtlbファイルを編集することによって、VS2008をだましてこの参照を追加できるようにする方法はありますか?
グーグルは解決策を考え出していません。私が見つけたのは、これが「設計による」と述べているMicrosoft Connectの記事だけです:http ://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID = 120882
.net - .NET Interop: C# で実行中の COM オブジェクトのすべてのインスタンスを検索する
バックグラウンド
コマンドライン ツールを使用して Office アプリケーション (Word および PowerPoint) を自動化しています。
このツールで実行する必要があることの 1 つは、Word の実行中のすべてのインスタンスを見つけることです。
インスタンスの1つへの参照を取得する方法を知っています...
私の質問
探しているアプリケーションのインスタンスを 1 つだけではなく、すべて見つける方法。
注: 私の具体的な質問は Office アプリケーションに関するものですが、より一般的な回答にも興味があります。
c# - .NET / COM イベントの相互運用性
TlbImp.exe によって生成された相互運用アセンブリがあります。生成されたクラスは頻繁にイベント処理され、パフォーマンスが非常に重要です。
しかし、問題があります。イベントは、空のイベントハンドラーでさえカウントされるような方法で登録/登録解除/呼び出されているようです.1..Nイベントのセットを考えると、イベント3にハンドラーを登録すると、次のようになりますこれ:
非常に頻繁に発生するイベントが多数ある場合、これは大きなオーバーヘッドを生成します。
問題は、.NET で COM イベントを操作するより良い方法はないかということです。ツールか何か、または相互運用アセンブリのイベント コードを最初から書き直す必要がありますか?