問題タブ [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# - .NETアプリで登録無料comを使用する
COMDLLを登録せずに.NETサービスからサードパーティのCOMDLL(.NETコンポーネントだとは思わない)を使用しようとしていますが、今のところ運がありません。
ここ(http://stackoverflow.com/questions/465882/generate-manifest-files-for-registration-free-com)からマニフェストファイルをコピーして、開始点として使用しました(COMDLLマニフェストを生成しました参照されるmt.exe/zippy42.exe)。しかし、私が得るのは次のエラーだけです:
例外:System.InvalidCastExceptionメッセージ:タイプ'LOGICLib.LogicClass'のCOMオブジェクトをインターフェイスタイプ'LOGICLib.ILogic'にキャストできません。IID'{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAA3E8FB4}'のインターフェイスのCOMコンポーネントに対するQueryInterface呼び出しが、次のエラーのために失敗したため、この操作は失敗しました:そのようなインターフェイスはサポートされていません(HRESULTからの例外:0x80004002(E_NOINTERFACE)) 。ソース:D:\ MyProject \ Source \ Server \ MyAssembly \ Loader.cs:lineのMy.Server.MyAssembly.Loader.Connect()のLOGICLib.LogicSecuredClass.Connect(String IP、UInt16 Value、Int32&Result)のInterop.LOGICLib 461
アプリケーションマニフェストは、サービスを開始するexeにちなんで名前が付けられています。また、COMDLLを呼び出すアセンブリにちなんで名前を付けてみました。コマンドラインから始めて、VisualStudioのデバッガーを使用してみました。また、サードパーティから提供された相互運用ファイルを使用して、独自のファイルを生成してみました。
(注-これまでのところ、Windows XPでのみテストしました。)
私は今これに2日間を費やしましたが、まったく進歩していません。私が見逃したかもしれないアイデアはありますか?
com - Reg-free COM - クライアント exe に相対的な COM dll の場所
レガシ com コンポーネントを登録する必要がないように、reg-free com を使用したいと考えています。ただし、com dll をクライアント exe のディレクトリ内またはその下にない場所 (例: ....\lib) に配置できるようにしたいと考えています。相対パスまたは絶対パスが許可されていないため、サーバー マニフェスト ファイルでこれを行うことはできません。
これを回避する方法があるかどうか誰かが知っていますか?
更新: XP で動作する相対パスしか見つかりませんでした。ただし、Windows Server 2008 ではアクティベーション コンテキスト API を使用して絶対パスを使用できるので、すばらしいです。私の問題は、COM コンポーネントがマネージ データベース ドライバーに静的に依存しているにもかかわらず、現在それが見つからないことです。マニフェスト ファイルについて読んだことから、COM dll と同じディレクトリにあるため、この dll を指す COM reg-free マニフェストに別の要素を単純に追加できることを望んでいましたが、動作させることができません。つまり、要約すると、別のディレクトリ (exe ディレクトリのサブディレクトリではない) の COM マニフェスト/dll を参照するためにアクティベーション コンテキスト API を使用する 1 つのディレクトリに exe があります。
c++ - COM無料登録のデバッグ(c ++)
2つのCOMサーバーdllを使用するCOMクライアントアプリケーションを作成しました。このアプリケーションをCOM登録なしで実行したい-つまり:winsxs / .manifests
クライアントアプリケーションからCOMオブジェクトのインスタンスを作成しようとすると、(...ほぼ予想される...)「クラスが登録されていません」というメッセージが表示されます。
私は以前にその種の構成を成功させましたが、なぜこれが失敗するのか理解できません。
詳細は次のとおりです。
- 私が持っているモジュール:
- 2つのCOMサーバー(dll1.dllおよびdll2.dll)に依存するMFCクライアント
- dll1.dllCOMサーバーはdll2.dllに依存します
- dll2.dllにはCOMの依存関係はありません
私が持っているCOMオブジェクト:
- dll1.dll(.idl言語)
-
-
- dll2.dllで
-
-
- クライアントの呼び出し
-
-
- client.exe.2.manifest
-
-
sxsアクティベーションコンテキストの生成中にエラーは発生しません:-Windowsログにエラーはありません(マニフェスト構文が正しいことを意味します)-sxstraceによってエラーが検出されませんでした(ログは「INFO:ActivationContextgenerationsucceeded。」メッセージで終了します。エラーまたは疑わしいメッセージ。さらに、マニフェストが正しくロードされていることがわかります)
何か案が?
sxstraceを使用してsxsをより深くデバッグする方法はありますか?たとえば、実際に登録されたcomまたはclrクラスのリストを取得しますか?
よろしくお願いします
c# - C# で COM DLL を静的にリンクする (regfree を避ける)
私はおそらくばかげた質問があります:
VC++ COM DLL (内部で開発) があり、メイン アプリを C# に移植し、COM 相互運用機能を使用して、COM dll にアクセスするための reg-free を使用しました。内部に埋め込まれたマニフェストを使用すると、すべてが正常に機能します。
ただし、友好的な製品開発/マーケティング/販売は、パッケージを最小化し、COM dll を直接含めたいと考えています。どういうわけか、アプリ ディストリビューションには exe のみを含める必要があると誰かが確信するようになりました (管理されていないため、単に ILMerge することはできません)。
COM の tlb/lib があるので、COM 全体を C# マネージド リワークに移植せずに、どうにかしてそれを静的にリンクできますか?
ありがとうございました
PS 私の言葉遣いを許してください: 会社は縮小され、私は先週かそこらですべての .NET を学ばなければならなかった Python の男です。
delphi - サイドバイサイド(または登録無料のCOM)とDelphi?
重複の可能性:
登録なしのCOM / DLL?
私は、主にアプリケーションを集約するために、Delphiで記述された多くのActiveXコントロールを使用するアプリケーションをサポートしています。これらは現在登録する必要があります。これは問題ありませんが、乱雑です。Delphi(またはその他の非.NETソリューション)で記述されたDLLを並べて(またはreg-free-com)入手した人はいますか?
visual-studio - Visual Studio によって生成された登録不要の COM マニフェストをカスタマイズするにはどうすればよいですか?
ClickOnce を使用して、カスタム COM コンポーネントを使用して .NET アプリケーションを展開しようとしています。残念ながら、このアプリケーションは Visual Studio によって生成されたマニフェストを使用して COM コンポーネントを登録不要モードで使用することはできません。数回試行した後、マニフェストに変更が必要であることがわかりました。COM 参照のプロパティで Isolated=True を設定することによって生成されるマニフェストに <comInterfaceExternalProxyStub> 要素を追加する必要があります。
この変更を手動で行ってから、正しい順序で mage を使用して ClickOnce マニフェストに再署名すると、アプリケーションが機能します。しかし、私はこのプロセスを簡素化して、次の人がそれを経ずにアプリケーションをデプロイできるようにしたいと考えています。
理想的には、Visual Studio で一部の設定を編集するか、MSBuild プロジェクト ファイルを手動で変更して、この変更を行うことができます。それが不可能な場合は、変更を行うスクリプトを作成し、それをビルド後のステップなどに含める必要があると思います。
将来の展開のためにこの変更を自動化する方法はありますか?
com-interop - マネージド/アンマネージド相互運用で登録不要の COM を動作させる方法
マネージド C# DLL (Managed.dll) から使用しようとしているアンマネージド C++/ATL インプロセス COM オブジェクト (Unmanaged.dll 内) があります。しかし、登録不要のCOMを使いたい。私はこれらのステップまでそれを持っています:
- COM オブジェクトを開発マシンに登録します。インプロセス サーバーには、適切に登録されたタイプ ライブラリが必要です。
- C# プロジェクト内の COM オブジェクトへの参照を追加し、参照プロパティを Isolated = True に設定します。
これにより、Unmanaged.dll、Managed.dll、および Native.Managed.manifest が生成されます。マニフェストを開くと、システムがマニフェストを使用して、登録不要の方法で COM オブジェクトをロードする方法が明らかです。
これがこすりです。Managed.dll を動的にロードしてパブリック タイプにアクセスするマネージ EXE (Managed.exe) があります。「動的に」とは、Assembly.LoadFrom("Managed.dll") を使用するということです。Managed.dll 内のコードが COM オブジェクトを作成しようとすると、「クラスが登録されていません」という例外が発生します。Managed.dll が読み込まれると、アクティベーション コンテキストが正しく設定されないようです。
このシナリオで登録不要の COM を動作させる方法はありますか?
visual-studio - 登録不要の COM コンポーネントは、開発マシンに登録せずに使用できますか?
私が開発した登録不要の COM コンポーネントは、コンポーネントを登録する必要なくターゲット マシンで正常に動作します。これは、tlb が埋め込まれた dll と、アセンブリの依存関係とコンポーネントの CLSID を一覧表示するマニフェストを持つ RT_MANIFEST リソースにあります。
Visual Studio(2008) では、私が試した少なくとも 2 つのことを行うために、この COM コンポーネントを登録する必要があります。コンポーネントへの参照を追加するとき、コンポーネントが登録されていないと、参照用に分離されたプロパティを選択できません。コンポーネントが登録されていない限り、デバッガーの実行中にオブジェクトのインスタンスを作成することもできません。ただし、参照を追加してアプリケーションをコンパイルし、コンポーネントを登録せずに実行できます。
Visual Studio で登録不要の COM コンポーネントを登録せずに使用する方法はありますか?それとも、すべてが正しく機能するために開発マシンに登録する必要がありますか?
com - さまざまな場所にある多くの dll でアクティベーション コンテキスト API を使用する
場所Aで実行されている.NetクライアントでアクティベーションコンテキストAPIを使用して、場所Bにreg-freeのCOMコンポーネントをロードしています(これは、同じマシン上の兄弟/子孫などではなく、Aとは完全に異なる場所です)。 ACTCTX の場所 B を渡すと、正常に動作します。
ただし、別の COM dll を使用して同じことを行う必要があります。この COM dll は、完全に異なる場所にあるいくつかの .Net COM アセンブリに依存しています。
依存する .Net アセンブリをマニフェストに追加し、マニフェストと COM dll を場所 B に配置しましたが、依存する .Net アセンブリを場所 A (クライアントが実行される場所) に配置して動作させる必要があります。実際には、場所 A と場所 B とはまったく異なるディレクトリに存在します。
私がやろうとしていることは可能ですか?つまり、アクティベーション コンテキスト API を使用して、関連のない異なるディレクトリに複数の COM コンポーネントを読み込むことは可能ですか?
c++ - C++ コンポーネントでアクティベーション コンテキスト API を使用する
私は現在、いくつかのレガシー c++ com コンポーネントに取り組んでいる ac# 開発者です。登録せずに他の com コンポーネントを呼び出すために、アクティベーション コンテキスト API コードを com コンポーネントに追加しようとしています。
アクティベーション コンテキストを操作するダミーの C++ プロジェクトを作成しましたが、問題なく動作しました。ただし、同じコードを従来の com コンポーネントに追加すると、コンパイルすることさえできません: エラー 1 エラー C2065: 'ACTCTX' : 宣言されていない識別子
ダミー プロジェクトに特別なヘッダーを追加しませんでしたが、正常に機能したので、なぜこれが起こっているのかわかりません。うまくいけば、これはベテランの C++ 開発者にとっては些細なことです...