問題タブ [registration-free-com]

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 投票する
2 に答える
232 参照

c# - 登録不要の COM 相互運用初期化 - パラメーターなしのコンストラクター

登録不要の COM Interop ライブラリを作成する必要があるMSDN リンクを参照

要件の1つは、引用します

「.NET ベースのクラスが COM からのレジストリを使用しないアクティベーションと互換性を持つには、クラスに既定のコンストラクターがあり、パブリックである必要があります。」

私がそれを読んだとき、私は次のものを作成する必要があります...(これは技術的に機能し、COM経由でこれをインスタンス化するのに問題はありません)

メソッドが呼び出される前に (インターフェイスを介して) このクラスが確実に初期化されるようにする最善の方法を探しています。私が知る限り、パラメーターを使用してコンストラクターをオーバーロードすることはオプションではありません-通常、このクラスをパラメーターを取ったコンストラクターで初期化しますが、Registration Free COM では、そのオプションがありません (または私は?? )。

私の代替手段は、次のような「初期化」機能だと思います...

これは面倒だと思いますが、実行可能です...しかし、私が見逃しているより良いオプションは何ですか?

0 投票する
0 に答える
198 参照

.net - Java アプリケーション内のアンマネージ ネイティブ C++ ライブラリから未登録の .NET アセンブリをロードする

ネイティブ コードを含む可能性のあるカスタム パッケージで拡張できる Java アプリケーションを使用しているため、拡張 jar を追加する以外に Java 環境を制御することはできません。

この例では、Java 拡張機能から C# コードを呼び出せるようにする必要があります。これは、以前に登録不要の COM を使用して純粋なネイティブ コンテキストから使用された C# コードであり、正常に動作します。今度は、この Java コンテキストから同じコードを使用できるようにする必要がありますが、DLL を見つける場所を制御する方法がないように思われるという問題が発生しました。DLL を JRE/JDK の bin ディレクトリにインストールすることを要求することは明らかにオプションではなく、DLL を GAC に登録することを要求することは理想的ではありません。

現時点では、すべての DLL 依存関係が拡張機能の jar にパッケージ化され、実行時に必要なときに読み込まれることを願っています (手動のインストール手順は必要ありません)。

アクティベーション コンテキスト API を使用してこれを機能させたいと考えており、 D : \somepath\の DLL を使用して、このコードのさまざまなバリエーションをテストしました。

マニフェストには、 CoCreateInstanceの呼び出しによって参照される C# クラスを含むアセンブリの詳細を含む、1 つのdependentAssembly が含まれています。

mt.exe を使用して DLL からダンプされたこの形式のマニフェストでも試してみました。

CreateActCtxActivateActCtxの呼び出しは成功しますが、DLL をC:\Program Files\Java...に配置しない限り、 CoCreateInstance呼び出しは常に失敗し、0x80070002 が返されます。

完全に管理されていない C++ DLL を読み込み、任意の既知の場所にある DLL から C# クラスのインスタンスを作成できる (GAC を使用する以外の) 解決策はありますか?

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

c++ - 登録不要の COM が使用されている場合、Powershell は COM オブジェクトを使用できません

powershell で COM オブジェクトを登録なしで使用しようとしています。私のコンポーネントは x86 で、poweshell_ise.exe も x86 です。

これを行うために、dll ベースの com サーバーのマニフェストを作成しました。

そして、powershell スクリプトのマニフェスト:

powershell では、次のように使用しています。

その後、次のエラーが発生します。

Process Explorer にComComponent.dll読み込まれていることがわかります。また、何らかの理由で powershell がレジストリ キーpowershell_ise.exeを読み取ろうとしていることがわかります。HKCR\TypeLib\{<TLB_CLSID>}

同じ機能が、登録済みの COM を使用して powershell で機能しています。タイプライブラリを別のファイルに入れようとしましたが、同じ結果になりました。

何が問題になる可能性がありますか? ありがとうございました

0 投票する
0 に答える
94 参照

python - 登録不要の Python COM コンポーネントの作成

COM ライブラリを理解しようとしていますが、まだ混乱しています。Python オブジェクト com を可視化したい場合、私が見つけることができる唯一の指示は、呼び出されてクラス インスタンスを名前で生成するために使用される COM サーバーを設定する Python スクリプトを作成することです。IIUC さん、これは、CLSID をserver.pyファイルのパスにリンクする情報をレジストリに永続的に追加することで可能になります。最小限の例を次に示します。

次のように呼び出されます:

ただし、過去に、COMクライアントプロジェクト(VBA)への参照として追加できるfile.dllをダウンロードしたことがあり、--register/regsrvr/etcを呼び出すことはありません。実行時にレジストリを変更して元に戻すために必要なすべての情報が dll に含まれていると思います。アーリー バインディングまたはレイト バインディングを使用して、クラス インスタンスを作成できます。参照されている dll にタイプ ライブラリが含まれている場合は、IntelliSense も取得します。

後者の方法は、はるかに単純で移植性が高いと感じます。これをPythonでエミュレートする方法はありますか?