問題タブ [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.
.net - ローダーが登録不要の COM コンポーネントのレジストリを検索するのはなぜですか?
登録不要の COM を使用して、COM コンポーネントを .Net プロセスにロードすることに成功しました。突然何かが変わり (私がランチに出かけている間に、どうやら :-) )、読み込みプロセスが機能しなくなりました。
以前は COM コンポーネントが正しく読み込まれていましたが、現在は FileNotFoundException が発生しています。
ProcMonを実行して何が起こっているのかを調べると、ローダーがレジストリで CLSID を検索し、コンポーネントが登録されていることがわかりました。次に、登録されたパスを調べて、dll がそこにないことを発見します。
登録不要の COM を使用してコンポーネントを構成したときに、ローダーがコンポーネントを探すためにレジストリにアクセスする理由を誰か教えてもらえますか? マニフェストがレジストリよりも優先されると思いましたが、これに関するドキュメントが見つかりません。
com - 登録不要の COM、スレッド モデル、MT.exe および *.RGS スクリプト
VS2010 を使用して mt.exe でマニフェストを生成している登録不要の C++ COM コンポーネントがあります。クラスが使用するスレッドモデルを指定できないことを除いて、すべてが機能します。小さな再現プロジェクトを作成しました。生成されたマニフェスト ファイル ( RGS.dll.embed.manifest
) は次のとおりです。
私が問題を抱えている部分はcomClassノードです
次のページの「Sxs と登録不要の COM アクティベーション」の例のように、threadingModel 属性が必要です 。
でスレッド モデルが指定されていないことは知っていますが、*.tlb
原田センの MSDN ドキュメントに関するコメントから、登録スクリプト ファイル ( )
http://msdn.microsoft.com/en-usmt.exe
でスレッド モデルを指定できるはずです。 /library/windows/desktop/aa375649(v=vs.85).aspx*.rgs
*.rgs
ATLウィザードが作成したファイルがあります
だから私は*.rgs
ファイルをmt.exe
ビルドログから、*.rgs
ファイルが正常に解析されたことを確認します
(具体的には、"Valid GUID!!!" の行は、rgs:
パラメータなしで削除されますmt.exe
)
まだ私にRGS.dll.embed.manifest
はthreadingModel属性がありません。
この人は、私がオンラインでこの問題について話しているのを見つけることができる唯一の人です。解決策を見つけ、生成後にマニフェストを編集しました。mt.exe ツールが RGS ファイルを使用してマニフェストを作成する方法と、threadingModel を取得するために必要なことを知っている人はいますか?
.net - VBAから登録なしのCOMを動作させることができません
更新:簡単な例を機能させるために20時間以上費やした後、これは見た目ほど単純ではないことに気付きました。このような記事は「落とし穴」を明らかにします-そしてこれはWindows7の前に書かれました(マニフェストの扱いが異なります)。VSTOを介して.NETアセンブリをVBAに公開することに固執しています。
単純なCOM-Visible.NETアセンブリを作成し、ExcelVBAから呼び出そうとしています。.NETビルド中に「COM相互運用機能に登録」すると、VBAから正常に呼び出すことができます。
ただし、登録なしでやりたいです。
ハンスからのアドバイスごとに更新:
[COM相互運用機能の登録]のチェックを外し、app.Manifestを次のように設定しました。
次のようなダミーの「client.manifest」を作成しました。
オブジェクトの作成時にclient.manifestを使用するようにVBAを変更しました。
CreateObjectで失敗し、役に立たないエラーが発生しますMethod 'CreateObject' of object 'IActCtx' failed
。
sxstraceは、client.manifestを読み取り、アクティベーションコンテキストを作成することを示しています。プロセスモニターは、ComTest.dllにアクセスし、レジストリでクラス975DC7E0-4596-4C42-9D0C-0601F86E3A1Bを検索することを示しています。
私は何が欠けていますか?
.NETコードは次のとおりです。
64ビットのWindows7を実行しています。
com - SilverLight コンポーネントは、登録不要の COM 可視 .NET オブジェクトをインスタンス化できますか?
アクティベーション コンテキスト API を使用して、登録不要の COM 可視 .NET オブジェクトを IE で実行されている SilverLight 5.0 コンポーネントにロードしようとしています。 http://msdn.microsoft.com/en-us/library/ms973913.aspx
http://msdn.microsoft.com/en-us/library/gg192793(v=vs.95).aspxで説明されているように、SilverLight コンポーネントはブラウザーで信頼できるアプリケーションとして実行されています。
マニフェストが適切に形成されるように、アクティベーション コンテキスト API を使用してスタンドアロン テスト アプリケーションにオブジェクトを読み込むことができます。ブラウザー内で実行されている SiverLight では、コンポーネント ローダー DLL (AppData/LocalLow から読み込まれる) はアクティベーション コンテキストを正常に作成およびアクティブ化しますが、AppData/LocalLow からの COM 可視 .NET オブジェクト DLL の読み込みに失敗します。結果は常に「ファイルが見つかりませんでした」です。
同様の設定で SilverLight/COM を使用した経験のある人はいますか?
ティア
com - C# などのマネージ コードから ActiveX コンポーネント用の埋め込み登録不要マニフェストを使用するにはどうすればよいですか?
システム全体またはユーザー全体で登録されていない特定のバージョンの ActiveX コンポーネントを使用したいと考えています。マニフェスト ファイルを使用すると、すべてが期待どおりに機能します。ただし、埋め込みマニフェストは C++ クライアント コードに対してのみ機能します。
ここに依存宣言があります
SxStrace を使用すると、次のように表示されます
どうやら、何が何でもDLLが必要なようです。問題は、AxImp から取得した DLL にマニフェストが埋め込まれていないことです。埋め込みマニフェストを使用する良い方法はありますか? AxImp から取得した DLL に mt を埋め込むことができるように感じますが、それはハックのようです。
PS ocx を dll に名前変更することが良いアプローチであるかどうかはわかりません。AxImp も COM 用に同じ名前の DLL を生成し、COM CLR プロキシの出力名を明示的に提供するフラグがないように見えます。
c# - C# プロジェクトの追加参照 - 構成に基づく動的パス?
私の C# プロジェクトの 1 つは、別のプロジェクトをビルドした後に tlbimp.exe を使用して手動で作成された (ビルド イベント後) .dll を参照する必要があります。その理由は、開発用コンピューターには DLL を登録する権限がなくなったため、DLL の登録を廃止することを選択したためです。
だから今、私はソリューションの2つの構成を持っています.1つはRELEASEで、もう1つはDEBUGです。2 つから生成された DLL は異なります。参照を追加して、適切なビルド フォルダー /RELEASE/AVClib.dll および /DEBUG /AVClib.dll に動的に参照されるようにするにはどうすればよいですか。
プロジェクト構成を頻繁に切り替えることが予想され、毎回再構築したくないため、それらを他の場所にコピーして単一の場所を参照したくありません。
私はプロジェクトの構成に比較的慣れていないので、問題に間違ってアプローチしている場合は、アドバイスをお願いします!
c++ - DLL を登録せずに C++ COM コードを単体テストするにはどうすればよいでしょうか。
従来の c++ COM アプリケーションに単体テストを追加しようとしています。また、各ビルドでエラーが発生していないことを確認するために、ユニット テストを実行できるビルド マシンも必要です。ただし、1 つのビルド マシンで複数のバージョンを並行してビルドできるように、ビルド マシンで com dll を登録する必要はありません。マニフェスト ファイルを使用して登録無料の com を使用するように変更できると想定していましたが、それを機能させるのに非常に苦労しています。まだコードベースではなく、Microsoft が提供する基本的な例だけです。
私はこのページhttp://msdn.microsoft.com/en-us/library/ms973913.aspx#rfacomwalk_topic8を使用してきましたが
、マニフェストファイルを使用するために登録されていないdllで実行しようとすると、単に機能しません、「クラスが登録されていません」というエラーが表示されます
彼らが提供するサンプルは (c++ com サーバーと c++ クライアントを使用して) 正常に動作しますが、再構築すると動作しません。
私たちは Visual Studio 2013 を使用しているため、登録無料の com が機能する方法に大きな変更があったように見えます。これにより、このチュートリアルは新しいコンパイラと互換性がなくなります。
Visual Studio の最新バージョンで登録無料の com を使用するためのリソースを教えてもらえますか? VS 2013 を使用していますが、2010 コンパイラをターゲットにしているため、大きな違いはありません。
また、マニフェスト ファイルよりも登録せずに com コンポーネントで C++ 単体テストを実行するより良い方法がある場合は、それらについても聞きたいです。
ご協力いただきありがとうございます。