問題タブ [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.

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

c# - タイプライブラリをC#コードとしてインポートするツール

アセンブリを生成するのではなく、COMタイプライブラリをC#コードにインポート/変換するツールはありますか?TLBIMPツールとTypeLibaryConverterクラスは、アセンブリのみを生成します。

生成されたInteropアセンブリに対してReflectorを実行し、分解されたソースをコピーして貼り付けることで、C#定義をリッピングすることに成功しましたComImportが、通常、コンパイルする前にかなりの手動パッチを適用する必要があります。

望ましい目標は、衛星相互運用DLLを含まない単一のEXEであるため、おそらく答えは、ILMergeを使用して相互運用DLLをEXEに効果的に埋め込むことです。

私は過去にそのようなツールに出くわしたと確信していました-しかし多分それはそれを夢見ていました:-)

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

c# - C# クラス ライブラリを COM+ サーバー アプリケーションとして使用する

C# で .NET クラス ライブラリを作成し、それを COM に公開しました。インプロセス COM サーバーとして正常に動作します。ただし、アウトプロセス COM サーバーとして使用して、別のプロセスに入れたいと考えています。

そのために、COM+ アプリケーションを作成してみます。空の COM+ アプリケーションを作成し、クラス ライブラリに実装されているクラスを追加しました。ライブラリに実装されているクラスをインスタンス化するために CoCreateInstance() を呼び出すと、COM+ サロゲート プロセスがアクセス違反を検出して終了します (クラッシュ ダンプが続きます)。

COM+ でアウトプロセス COM サーバーとして使用できるクラス ライブラリを作成するために必要な特別な手順はありますか?

COM+ サロゲート プロセスは、次のクラッシュ ダンプでクラッシュします。

例外: C0000005
アドレス: 0x000C1618

コール スタック:
! + 0xC1618
mscorwks!Ordinal79 + 0xE41C
mscorwks!Ordinal79 + 0xE4AD
mscorwks!CoInitializeEE + 0x563F
mscorwks!CoInitializeEE + 0x5672
mscorwks!CoInitializeEE + 0x57F1
mscorwks!CoInitializeCor + 0x210E
mscorwks!CoInitializeCor + 0x48D
mscorwks!Ordinal79 + 0x16D2
mscorwks!ReleaseFusionInterfaces + 0x20B28
COMSVCS! + 0xC29A2
COMSVCS! + 0xC2BDA
COMSVCS!CoCreateStdTrustable + 0xCB10
ole32!CoMarshalInterface + 0x2642
ole32!CoInstall + 0x673
ole32!CoQueryAuthenticationServices + 0x1F44
ole32!CoQueryAuthenticationServices + 0x2862
ole32!CoWaitForMultipleHandles + 0xC267
ole32!CoQueryClientBlanket + 0x16CE
ole32!CoCreateObjectInContext + 0xC8E
ole32!CoInstall + 0x87A
ole32!CoWaitForMultipleHandles + 0x10479
ole32!CoMarshalInterface + 0x2808
ole32!CoGetTreatAsClass + 0xBE7
ole32!CoGetTreatAsClass + 0xB9E
ole32!CoMarshalInterface + 0x28F2
ole32!CoMarshalInterface + 0x2642
COMSVCS!CoCreateStdTrustable + 0x106A4
ole32!CoMarshalInterface + 0x2642
ole32!CoPopServiceDomain + 0x14FE
RPCRT4!CheckVerificationTrailer + 0x70
RPCRT4!NdrStubCall2 + 0x215
RPCRT4!CStdStubBuffer_Invoke + 0x82
ole32!StgGetIFillLockBytesOnFile + 0xFC92
ole32!StgGetIFCillLockBytes0
ole32!CoRevokeClassObject + 0xA3E
ole32!CoRevokeClassObject + 0x963
ole32!StgGetIFillLockBytesOnFile + 0xF872
ole32!WdtpInterfacePointer_UserMarshal + 0x80E
ole32!StgGetIFillLockBytesOnFile + 0xF792
RPCRT4!NdrGetTypeFlags + 0x1C9
RPCRT4!NdrGetTypeFlags + 0x12E
RPCRT4!NdrGetTypeFlags + 0x5A
RPCRT4!CreateStubFromTypeInfo + 0x2D7
RPCRT4!CreateStubFromTypeInfo + 0x318
RPCRT4!NdrConformantArrayFree + 0x2CB
RPCRT4!NdrConformantArrayFree + 0x20F
RPCRT4!I_RpcBCacheFree + 0x61C
RPCRT4!I_RpcBCacheFree + 0x43E
RPCRT4!I_RpcBCacheFree + 0x604
kernel32!GetModuleFileNameA + 0x1B4

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

excel - .NETDLLへのExcel参照が新しいバージョンで壊れます

いくつかのアプリケーションで使用されているため、GACにインストールされている.NETDLLがあります。

これらの1つは、.NETのCOM相互運用機能を使用してDLLを参照するExcelワークブックです。COMtlbファイルがアプリケーションディレクトリにインストールされます。

DLLの更新バージョンがインストールされている場合を除いて、これはすべて正常に機能します。一部のPCでは、ブック内のCOM参照が壊れます(「欠落」と表示されます)。関連するマクロを実行すると、Excelがクラッシュします。これは、VBAエディター内で欠落している参照のチェックを外し、DLLへの参照を再度追加することで修正できますが、ユーザーが開くたびにこれを行う必要はありません。

関連するすべてのオブジェクトとメソッドの署名は変更されておらず、変更されないGUIDで装飾されています。

参照が壊れた理由はありますか?

編集:レジストリの詳細を調査したところ、インストール時にCOM登録が正しく行われていないようです。ただし、これはインストールの失敗としては表示されませんでした。しかし、根本的な原因を見つけることにまだ近づいていません。

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

c++ - .Net Web アプリケーションで COM オブジェクトを管理する方法

悪名高いメモリ リークの問題が時々発生する従来の C++ アプリケーションは、.Net サーバー ベースの Windows アプリケーションから呼び出す必要があります。.Net ガベージ コレクションの時間は決定できず、C++ オブジェクトが破棄されるか、「時間通りに」破棄されない場合があり、予測できない結果が生成され、通常は C# Web アプリがクラッシュします。C++ オブジェクトをできるだけ頻繁にガベージ コレクション スタックにプッシュする最善の方法は何ですか。ただし、COM オブジェクトへの .Net 参照を削除するほど頻繁ではありません。COM オブジェクトはサブオブジェクトを生成できるため、COM オブジェクトの .Net 参照カウントは関数呼び出しだけで変更でき、インスタンス化とは限らないことに注意してください。

メモリ リークが発生し、COM オブジェクトがクリーンアップされないため、IIS が数回トリップしてクラッシュするほどパフォーマンスが低下します。IIS を再起動すると、次回まで問題が修正されます。定期的な再起動は役に立ちますが、忙しい日は営業日中にこれを引き起こす可能性があります.

数年前に.Net 1.1を使用してこれを解決する必要がありました。他の誰かが私の解決策またはより良い解決策を持っているかどうか疑問に思っています。これは ASP.NET ではありません。これは .Net dll です。

最終結果は完全に満足できるものではなく、Web サーバーは数か月ごとにクラッシュしました。

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

c# - C#COMオブジェクトへのIProvideClassInfoの実装

IProvideClassInfoC#COMオブジェクトにを実装して、そのイベントをWindows Script Host(WSH)から使用できるようにしようとしています。インターフェイスを実装し、メソッドへの呼び出しをトレースすることができましたGetClassInfo。ただし、イベントのフックアップは。で失敗しCannot connect objectます。

誰かがこれを行うことができましたか?

これは私のスクリプトコード(JScript)です:

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

vb.net - dotNet Interop Usercontrol のデフォルト プロパティ

VB6 アプリケーションで使用される dotNet コントロールの既定のプロパティを設定する必要があります。

DefualtProperty 属性はそのトリックを行いません。

ここで、 DispId を手動でゼロに設定するとうまくいくはずだと読みました。しかし、私がこれを行うと:

Visual Basic から、DispId Zero が DefaultProperty 用に予約されていることがわかりました。うん。そんなこと知ってる。それが欲しいです。しかし、どのように?

編集:

プロパティがVB6のデフォルトプロパティとして表示されるようになったため、機能します。しかし、これは私の問題を解決しません。変更できないコードがあり、次のようなことを行うからです。

この MSDN の記事には、これに関する情報が含まれています。

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

.net - Excel 相互運用: Range.FormatConditions.Add が MissingMethodException をスローする

Microsoft.Office.Interop.Excel アセンブリを使用して Excel スプレッドシートからデータをエクスポート/インポートするアプリケーションを作成しています。条件付き書式設定を使用しようとするまで、すべてがうまくいきました (1 ベースのインデックス作成とすべてのオプションのパラメーターを除く!)。Range.FormatConditions.Add を呼び出すと、そのようなメソッドが存在しないことを示す MissingMethodException が返されます。これは、Vista と XP の両方で発生します。

例外を生成するコードの例を次に示します。

0 投票する
4 に答える
3463 参照

c# - C#メソッドからJavaScriptの「ネイティブ」配列を返す方法は?

以下を使用して、JavaScript から C# メソッドを呼び出そうとしていますActiveXObject

最終的に、オブジェクトarrは含まれますが、配列は含まれません。C# メソッドからネイティブ JavaScript オブジェクトを返す方法はありますか?SAFEARRAYJScript

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

c# - ActiveXObject から window.document オブジェクトにアクセスするにはどうすればよいですか?

InternetExplorer で ActiveXObject から window.document オブジェクトにアクセスするにはどうすればよいですか? ActiveXObject に C# 言語を使用しています。

ありがとうポール。

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

delphi - Prism & Com Interop による機能の公開

Prism で記述されたクラスを COM Interop 経由で公開するにはどうすればよいですか? たとえば、次のインターフェイスがあるとします。

この例では、IFoo が TLBIMP を介してインポートされ、プロジェクトにリンクされていると想定しています。