問題タブ [regfreecom]
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.
c++-cli - ネイティブ C++ からの CoCreateInstance C++/CLI クラス
以下のように C++/CLI クラスを宣言しました
そして、ネイティブ C++ COM (TLB ファイルを #import して CoCreateInstance を使用) を介して "testCoClass" を作成したいのですが、常に "Class Not Registered" というエラーが発生します。「Regasm.exe」を使用してアセンブリを登録すると正常に動作しますが、アセンブリを登録したくありません。
このブログ投稿の手順に従いましたhttp://blogs.msdn.com/b/cheller/archive/2006/08/24/how-to-embed-a-manifest-in-an-assembly-let-me -count-the-ways.aspxを使用してマニフェストをアセンブリに埋め込みましたが、機能しませんでした。(このメソッドは常に C# アセンブリで機能しますが、これは C++/CLI アセンブリであることに注意してください。
提案をいただければ幸いです。
.net-4.0 - RegFree Com-visible ラッパーを介した Net .dll の初期化は、1 つの特定のディレクトリからのみ失敗します。
非常に興味深いことがありました。現在、ハイブリッド VB6/Net アプリケーションを使用しています。VB6 コードは、RegFree Com (マニフェスト) を介してアクティブ化される Com-Visible Net Wrappers を介して Net コードを呼び出します。これは非常にうまく機能します。当社のお客様は、異なるバージョンの Net コードを使用する異なるバージョンのアプリケーションを使用でき、競合が発生することはありません。
今日、当アプリの新しいテスト バージョンが C:\Program Files\OurApp ディレクトリからの Net dll の初期化に失敗したことに困惑しました。これは、多数の以前のテスト バージョンが存在していたディレクトリです。同じアプリを C:\Program Files\OurApp2 にインストールすると、アプリケーションは問題なく動作します。
アンインストールを試み、C:\Program Files\OurApp フォルダー全体を削除しようとしましたが、この特定のフォルダーにアプリを再インストールするたびに、ネット コードは実行されません。したがって、C:\Program Files\OurApp フォルダに関連する RegFree Com に関する情報がどこかに保存されていることは明らかです。
システムの復元後に問題を解決しました。
どうしたの?お客様がこの問題に遭遇しないようにするにはどうすればよいですか?
asp.net - ASP WebPage での登録不要の COM
コード ビハインド DLL と OCX を使用する Web ページ アプリケーションがあります。これらの DLL の一部は VB6 のもので、その他は C++ です。現時点では、これらの DLL や OCX へのアクセスはレジストリを介して行われているため、RegFree COMを使用してこれを変更したいと考えています。
問題: これまでに見つけたすべての例は、マニフェスト ファイルを使用して DLL にアクセスする EXE をレジストリ フリーのものに変更する方法を示しています。 DLL の mnaifest への依存関係が設定されているもの) と DLL 用の別のもの (DLL を参照するもの) があります。
私のシナリオで Registry Free COM を使用することは可能ですか? はいの場合、EXE->DLL 間の依存関係をどこに設定すればよいですか? Visual Studio のどこかにありますか??
ありがとうございました。
com-interop - .NETでの登録不要のCOM相互運用の正確な手順(zippy32を使用せずにコピーされたCOM dllを呼び出す)
登録不要のCOM参照を.NETアプリに追加したいと思います。登録なしとは、ユーザーがCOMコンポーネントをシステムに登録せずにアプリを実行できることを意味します。
このトピックに関する記事(MSDN、このS / Oの質問など)をいくつか見つけましたが、具体的な手順が含まれているものはありません。これが私が試したがうまくいかなかったことです:
- この回答
foo.dll
で説明されているように、mt.exeを使用してCOM dll(たとえば)のマニフェストを生成します。 - 「ビルドアクション」=「コンテンツ」および「出力ディレクトリにコピー」=「常にコピー」としてアプリに追加
foo.dll
します。foo.dll.manifest
interop.foo.dll
に付属しているものへの参照を追加しfoo.dll
ます。このセクションでアプリマニフェストファイルを追加します。
/li>ビルドして実行します。
アプリケーションの構成が正しくないというエラーがあります。<assemblyIdentity>
運が悪かったので、さまざまな値を試しました。
誰かが経験を共有できますか?ありがとう。
java - javaでreg Free com Dll(VC ++で作成)を動作させることができません
Java でロードするために Reg free COM dll を使用すると、機能しません。しかし、登録されたCOM dllがロードされる場合...登録されたCOM DLLとしてベアシステムで使用したくありません..
COM コンポーネントのマニフェストを追加しました。しかし、CoClass のオブジェクトを作成しようとすると、「オブジェクトの作成に失敗しました」というエラーで失敗し、CreateInstance は「0x80040154」を返します。シナリオ 1.java から c++ dll をロードしました。2.c++ dll は私の COM dll を使用します。
解決策を教えてください
c# - C#からマネージドCOMアセンブリのCOMイベントをサブスクライブする
.NET 3.5アプリケーションがあり、その特定の部分に.NET4を使用する必要があります。したがって、.NET4パーツを登録不要のCOMアセンブリとして公開しました。
.NET 3.5アセンブリには、次のコードがあります。これは正常に機能します。
IManagedInterfaceの宣言は次のとおりです。
次のように宣言されたイベントインターフェイスもあります。
これは、私が知る限り、この記事によると:http: //msdn.microsoft.com/en-us/library/dd8bf0x3.aspx
私の.NET4COMクラスは次のとおりです。
問題は、上部に表示されている.NET 3.5クライアントで、IMyComEventsからのイベントをサブスクライブ/処理するにはどうすればよいですか?
vb.net - 実行時エラー -2146234341 (8013101b) VB.NET から VB6 への自動化エラー、マニフェストを使用していますか?
reg-free シナリオで VB6 クライアントから VB.NET DLL (.NET FX 4.0) にアクセスしようとしています。
http://msdn.microsoft.com/en-us/library/ms973915.aspxの例に従おうとしましたが、成功しませんでした。ソースをダウンロード (記事内のリンク) してコンパイルしましたが、成功しませんでした (エラー メッセージ: 実行時エラー '-2146234341 (8013101b)': 自動化エラー")。登録済みの VB.NET DLL を使用して VB6 IDE から実行すると動作します。
.NET DLL が (VS2010 の「COM クラス」テンプレートを使用して) COM クラスとして作成され、参照される DLL のマニフェストが埋め込まれているかどうかにかかわらず、他の例を試してみましたが、何もうまくいきませんでした。
reg-free シナリオの VB6 クライアントで使用される VB.NET DLL (.NET FX v4) のマニフェストの例を含む簡単なソース コードを誰かが提供できますか?
よろしくお願いします。
c# - ビルド警告 - COM 参照の分離
reg free COM で使用する .NET 3.5 アプリケーションで参照されているアクティブな x コントロールがいくつかあります。ソリューションをビルドすると正常にビルドされますが、「COM 参照 'ActiveXControl' を分離する問題: レジストリ キー: 'パス' がインポートされませんでした」という一連の警告が表示されるため、生成されたマニフェストは不完全です。
正確なエラーは次のとおりです。
奇妙なのは、アクティブな x コントロールの 1 つが正常に構築されているのに、参照プロパティが同一であるように見えても、もう 1 つのコントロールは構築されていないことです。
現在考えられる唯一のことは、x64 ビット マシンでビルドしているということです。警告のレジストリ パスは、レジストリの 64 ビット部分のパスですが、アクティブな x コントロールは Wow6432Node に登録されています。
すべてのプロジェクトには、x86 のターゲット プラットフォームと .NET 3.5 のフレームワークがあります。MSBuild に 32 ビット レジストリを調べるように指示する方法はありますか、それとも他に何か不足していますか?
前もって感謝します。
vb6 - VB6でReg-Free COMアプリケーションを開発する
多くの COM コンポーネント (DLL および OCX) を含む VB6 アプリケーションを維持しています。開発と展開を合理化するために、reg-free com を使用したいと考えています。開発の問題は、アプリケーションが VB6.EXE インスタンス内で実行されることです。VB6 をだまして (未登録の) コンポーネントを使用させるにはどうすればよいですか? ブランチを切り替えるときにコンポーネントの登録/登録解除を行う必要がないことは、私にとって非常に重要です。VB6 の .manifest ファイルを生成することは問題外ではありませんが、VB6.EXE を起動するときに .manifest ファイルを指定するための、より最適な方法はありますか?
注: アクティベーション コンテキスト API は、開発環境内から使用しても役に立たないようです。
私が考えた解決策:
- マニフェストからコンテキストをアクティブ化し、VB6 を子プロセスとして起動するユーティリティ アプリケーション (動作しません。プロセスはアクティブ化コンテキストを継承しません)
- 起動時にコンテキスト アクティベーションを VB6 プロセスに挿入する (複雑すぎる; これを行うには、実行可能ファイルをハックする必要があります)
- 適切なコンテキストをアクティブ化した後、自分のプロセスで VB6 をホストする (これが可能かどうかさえわかりません)
- VB6アドインまたはVB6内で実行されるその他のユーティリティを使用してコンテキストをアクティブ化します(試してみましたが、うまくいかないようです)
1月16日更新
wqwで提案されているように、VB.exe.manifestでいくつかのテストを行いました。VB6.exe.manifest は機能しましたが、いくつかの注意事項があります。
- マニフェストで指定された SxS dll は、実際にはコンポーネントを参照していないプロジェクトの参照ウィンドウに表示されませんでした。
コンポーネントを参照したプロジェクトでは、次の順序に従ってディレクトリに存在することが示されます。
- プロジェクト ファイルに記録されたパス名 (ファイルがまだ存在する場合)
- プロジェクトと同じフォルダーに存在するかのようなパス名 (vbp)
ファイルがこれらのフォルダーのいずれにもない場合、プロジェクトはコンパイルされず (コードを実行するだけで VB6 で内部コンパイルが発生します)、「プロジェクトまたはライブラリが見つかりません」というメッセージが表示されます。
当然のことながら、VB6 は実際にレジストリをスキャンして COM コンポーネントを見つけ、コンパイル中に存在することを確認します。実際にVB6.exe.manifestを使用してCOMコンポーネントのインスタンス化をリダイレクトしたい場合、それが何を意味するのかわかりません。おそらく、定義済みの場所にダミーのコンポーネント ファイルがあると、まったく異なるコンポーネント セットがロードされて使用されるにもかかわらず、VB6 はすべてが正常であると信じ込ませる可能性があります。
さらに更新:
最後の仮定についてテストを行ったところ、それは誤りであることが判明しました。プロジェクトをコンパイルするには、コンポーネントが実際に存在する必要があります。適切にロードする必要があります (ダミーのゼロ長ファイルは受け入れられません!)。マニフェストが機能するかどうかさえわかりません。これは、より時間のかかるテストです (1 つはプロジェクト用、もう 1 つはマニフェスト用の、異なる結果を生成する 2 つのバージョンを持つコンポーネントが必要です)。
.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を実行しています。