問題タブ [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.
c# - .Net 2.0: 一時的なサブスクリプションを使用して、リモート コンピューター上のイベント パブリッシャーにサブスクライブする方法は?
私の問題は、サーバー アプリケーション (リモート コンピューター上) を使用して、特定のイベントを複数のクライアント コンピューターに発行することです。サーバーとクライアントは.Net-Remotingを使用して通信するため、現在、リモート.Net-Eventsを使用して機能を取得しています。ただし、1 つの欠点があります。サーバー (イベント パブリッシャ) がオフラインになり、再起動すると、リモート オブジェクト参照が無効になるため、クライアントは接続を失います。
この問題を解決するために、疎結合イベントと一時的な COM サブスクリプションを調べています。1 つのパブリッシャーと 2 つのサブスクライバーで小さなデモ アプリケーションを作成しました。1台のコンピューターで美しく動作します。
COMAdmin-Libraries を使用して、イベント サブスクライバーの一時的なサブスクリプションを作成しています。コードは次のようになります。
私の質問は次のとおりです。これをネットワーク経由で機能させるには、サブスクリプションで何を変更する必要がありますか? それは可能ですか?
c++ - Microsoft以外のプラットフォームでのコンポーネントオブジェクトモデル(COM)の使用
私は定期的に同様の状況に遭遇しています:いくつかの外部(非オープン、非文書化)データ形式にアクセスできるようにするために使用および呼び出す必要のあるCOM .DLL(IDLファイルなし)がたくさんあります。
MicrosoftのVisualStudioプラットフォームには、このようなCOM DLLをインポートしてプロジェクトで使用するための非常に優れた機能があります(Visual C ++の#importディレクティブ、またはVisual Basic .NETのダイアログを使用してそれらを選択して追加する)-これは、ベンダーが推奨する使用方法です。
マイクロソフト以外の開発プラットフォームでこれらのDLLを使用する方法を見つけることに興味があります。つまり、MinGWまたはCygwinでコンパイルされたC ++プロジェクトでこれらのCOMクラスを使用するか、LinuxへのWineのGCCポートを使用します(Linuxでネイティブに実行されるバイナリにWin32をターゲットとするC ++をコンパイルします)。
このドライバーを使用した場合の成功は限られていますが、100%の状況では成功しません(一部のメソッドによって返されたCOMオブジェクトを使用できません)。
誰かが同様の状況で成功しましたか?
php - COMを使用してPHP/IISからActiveDirectoryグループメンバーシップを読み取る方法は?
私は次のコードを持っています:
コマンドプロンプトから実行すると、正常に実行されます。IIS / PHP / ISAPIで実行すると、barfsします。
IISはWindows認証用に構成されており(匿名、基本、ダイジェストなし)、コマンドプロンプトと同じユーザーとして接続しています。IISログファイルまたはイベントログに特定のエラーが見つかりません。
この演習の主な目的は、スクリプトにユーザークレデンシャルを保持せず、IIS認証に依存してそれらをActiveDirectoryに渡すことです。LDAPを使用して同じことを実行できることは理解していますが、私が知る限り、資格情報を渡すことはできません。
おそらく、ASPに移植しようとしたときに発生するエラーに何らかの形で関連しています。エラー80072020(現在検索中)が発生します。
イベントログには、異常なことは何も示されていません。警告もエラーもありません。完全なセキュリティ監査が有効になっており(セキュリティポリシーのすべての項目で成功と失敗)、Webページに対して認証したすべてのユーザーに対して成功したWindowsログオンが表示されます(これは予想されます)。
c++ - C++ での COM イベントの発生 - 同期または非同期?
MS ATL ライブラリを使用して記述された ActiveX コントロールがあり、pDispatch->Invoke(..., DISPATCH_METHOD)
. コントロールは .NET クライアントによって使用されます。私の質問はこれです。イベントの発生は同期呼び出しですか、それとも非同期呼び出しですか? 私の懸念は、同期の場合、イベントを処理するアプリケーションがすぐに返されない限り、パフォーマンスの問題を引き起こす可能性があることです。
com - COM相互運用機能を使用してオブジェクトのライフサイクルを処理する最も効率的な方法は何ですか?
COM自動化用に作成したクラスを使用するWindowsワークフローアプリケーションがあります。COMを使用してクラスからWordとExcelを開いています。
私は現在、COMヘルパーにIDisposableを実装しており、Marshal.ReleaseComObject()を使用しています。ただし、ワークフローが失敗した場合、Dispose()メソッドは呼び出されず、WordまたはExcelのハンドルは開いたままになり、アプリケーションがハングします。
この問題の解決策は非常に簡単ですが、単に解決するのではなく、何かを学び、COMを使用する正しい方法についての洞察を得たいと思います。COMハンドルを所有するクラスのライフサイクルを処理するための「最良の」または最も効率的で安全な方法を探しています。パターン、ベストプラクティス、またはサンプルコードが役立ちます。
c# - C# COM Office オートメーション - RPC_E_SYS_CALL_FAILED
PowerPoint 2007 プラグインとして機能する C# プログラムを作成しています。一部のマシンでは、PowerPoint オブジェクト モデルへの一部の呼び出しCOMException
で、メッセージとともに がスローされますRPC_E_SYS_CALL_FAILED
。このエラーに関して何をすべきか、またはそれを回避する方法についての具体的なアドバイスは見つかりませんでした。グーグルでは、メッセージ キューまたはシングル スレッド アパートメントと関係があるように見えます。それとも私は離れていますか?
エラー メッセージの例は次のとおりです。
システムコールに失敗しました。(HRESULT からの例外: 0x80010100 (RPC_E_SYS_CALL_FAILED))
Microsoft.Office.Interop.PowerPoint._Presentation.get_FullName() で
残念ながら、問題はクライアントのマシンで発生しているため、簡単にデバッグする方法がありません! このエラーが発生するたびに、呼び出しを再試行する必要がありますか?
この問題を解決するためのアドバイスをいただければ幸いです。
com - アンマネージ コードによって使用されるメモリの量を確認する方法
大規模な COM ライブラリ (ArcObjects) に対して作業を行っており、メモリ リークを突き止めようとしています。
アンマネージ コード/オブジェクトによって使用されるメモリの量を決定する最も信頼できる方法は何ですか。
どのようなパフォーマンス カウンターを使用できますか?
c++ - ドラッグ中に QDrag が破壊された
QTreeView でドラッグ アンド ドロップを使用する Windows/Linux Qt 4.3 アプリケーションがあります。同じ Qt ライブラリ セットを使用する 2 つの非常によく似たアプリケーションがあります。ドラッグ アンド ドロップは、Linux では両方で機能しますが、Windows では 1 つのみで機能します。
動作しないアプリケーションでは、マウスを動かすとすぐに QDrag オブジェクトが削除されます。これは、ドラッグ中に Qt でまだ処理されているイベント キューから DeferredDelete イベントによって削除されます。QDrag オブジェクトが途中で削除される原因を確認する方法がわかりません。
この問題をデバッグする良い方法がわかりません。ソースを比較しましたが、明らかなものは見つかりません。あるアプリケーションのコードを別のアプリケーションで使用しようとしました。
助言がありますか?
アップデート:
QDrag 操作が失敗した理由は、COM が正常に初期化されなかったため、QDrag::exec の DoDragDrop への呼び出しがすぐに返されたためです。QApplication は、qt_init で OleInitialize を呼び出して COM を初期化しようとしましたが、「設定後にスレッド モードを変更できません」というエラーで失敗しました。
興味深いことに、OleInitialize が main で最初に実行される場合でもこれが発生するため、スレッド モードは外部依存関係によって最初に設定されます。Windows で動作するアプリケーションの違いの 1 つは、失敗するアプリケーションには .NET コードも含まれているため、それが問題である可能性があります。
解決済み:
この問題は、COM/CLR 相互運用の問題です。CLR は、初期化時にアパートメント状態を MTA に設定し、Qt が COM を初期化しようとすると失敗します。この問題と古い解決策については、Adam NathanがGotcha で STAThreadAttribute と Managed C++について説明しています。Visual Studio 2005 では、[構成プロパティ] > [リンカー] > [詳細設定] で /CLRTHREADATTRIBUTE:STA コンパイラ オプションを設定して、新しいエントリ ポイントを作成しなくても、スレッド属性を STA に設定できます。
c# - Windows インストーラー パッケージによって追加されたレジストリ エントリ内で、GAC 内のアセンブリへのパスを参照する方法を教えてください。
EnterpriseServices (COM+) を介して ServicedComponent として登録され、サードパーティ アプリケーションによって COM RPC を介して呼び出されるクラスを含む .NET アセンブリがあります。したがって、これを GAC に追加しHKEY_CLASSES_ROOT\CLSID\{clsid}\CodeBase
、GAC フォルダー内のアセンブリ DLL へのパスを含むレジストリ エントリを追加する必要があります。(regsvcs に頼ることはできません。これは 32 ビットのアセンブリであり、32 ビットのサードパーティ コンポーネントに依存しているためです。また、前に参照したサードパーティ アプリケーションでは、クラスを参照できません。 Wow6432Node)
質問は次のとおりです。
GAC で作成されるアセンブリへのパス、または少なくとも GAC フォルダー自体へのパスは、レジストリ キーなどの値で使用できるプロパティとして Windows インストーラーで使用できますか?
.net - .NETで記述されたユニットテストCOM
.NETから(直接の.NETアセンブリ参照を介さずに)COMに表示される.NETアセンブリを単体テストする方法はありますか?テストプロジェクトで.NETで作成されたCOMコンポーネントに参照を追加すると、文句を言います。