問題タブ [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.
com - VB6 IDE での作業時に COM コントロールをアンロードする
私の日常業務の一部は、従来の VB6 アプリケーションの保守と拡張です。一般的なエンジンは C/C++ で記述されており、VB6 はこれらの関数を使用してパフォーマンスを向上させます。
非同期プログラミングに関しては、C インターフェイスでは不十分であり、COM コントロールに依存して VB6 へのイベントを発生させます。
私の問題は、VB6 でコントロールを登録すると、VB がこのコントロールをメモリにロードし、VB6 IDE を終了するまでアンロードしないことです。コントロールは常にロードされているため、DLL ファイルがロックされているため、VC6 で再コンパイルできません。
私が見つけた解決策は、VB でコントロールを有効にするのではなく、コントロールCreateObject()
の完全な名前を使用することです。問題は、VB6 は私が使用しているインターフェイスを何も認識せず、IntelliSense にアクセスできないため、コントロールをオブジェクトとして宣言する必要があることです。これは苦痛です。
アプリケーションを終了した後、または IDE で直接コントロールをアンロードするように VB6 に指示する方法はありますか?
exception - COM オブジェクトの例外を追跡する方法は?
いくつかのCOM オブジェクトを含むDLLがあります。場合によっては、このオブジェクトがクラッシュし、多数の 16 進情報とともに Windows イベント ログにエラー イベントが登録されます。このクラッシュが発生する理由はわかりません。
では、これらの COM オブジェクトの例外を追跡するにはどうすればよいでしょうか?
c# - .NET アウト オブ プロセス サーバーの #import に関する問題
C++ プログラムで、.NET アウト オブ プロセス サーバーの TLB を #import しようとしています。
次のようなエラーが表示されます。
z:\server.tlh(111): エラー C2146: 構文エラー: ';' がありません 識別子「GetType」の前
z:\server.tlh(111): エラー C2501: '_TypePtr': ストレージ クラスまたは型指定子がありません
z:\server.tli(74): エラー C2143: 構文エラー: ';' がありません 「tag::id」の前
z:\server.tli(74): エラー C2433: '_TypePtr': 'inline' はデータ宣言では許可されていません
z:\server.tli(74): エラー C2501: '_TypePtr': ストレージ クラスまたは型指定子がありません
z:\server.tli(74) : 致命的なエラー C1004: 予期しないファイルの終わりが見つかりました
TLH は次のようになります。
GetType()、Equals() などの基本オブジェクト .NET オブジェクト メソッドを持つことにはあまり関心がありませんが、GetType() が問題を引き起こしているようです。
いくつかのGoogleの調査では、できる#import mscorlib.tlb
(またはパスに入れる)ことが示されていますが、それをコンパイルすることもできません。
任意のヒント?
com - VSセットアッププロジェクトからCOMを登録する方法は?
DLLをvsdraCOMとしてマークし、インストール後にレジストリに表示されますが、手動でRegAsmを呼び出すまで、アプリケーションにCOMインターフェイスが表示されません。なぜこれができるのでしょうか?
COM登録は、Vista(自分で確認)およびXP(同僚で確認)では機能しません。XPでのVisualStudio2005の使用。
com - RDML で COM オブジェクトからのエラーを処理する方法はありますか?
RDML で COM オブジェクトからのエラーを処理する方法はありますか? たとえば、 のような Word VBA メソッドを呼び出すとPasteSpecial
、エラーが返され、LANSA アプリケーションがクラッシュします。これらのエラーの処理を許可するドキュメントが見つかりません。
実際、一般的にエラー処理は LANSA と RDML の弱点ですが、それは別の話題です。
delphi - DelphiとCOM:TLBとメンテナンスの問題
私が働いている会社では、すべてのGUIをC#で開発していますが、アプリケーションカーネルは主にDelphi 5で開発されており(歴史的な理由から)、多くのコンポーネントがCOM+で作成されています。この非常に特殊な種類のアプリケーションに関連して、2つの質問があります。
DelphiやCOMの経験豊富な人たち、バグのあるTLBインターフェイスを操作するための回避策はありますか?バグのいくつかは次のとおりです。大きなTLBの編集中にIDEがクラッシュする、メソッドIDが失われる、TLBが破損するなど。ここでは、適切な解決策は見つかりませんでした。実際、新しい2007バージョンをアップグレードしてみました。ただし、新しいIDE TLBインターフェイスには、以前に見つかったものと同じバグがあります。
TLBのバージョンをどのように制御しますか?TLBファイルはバイナリ形式であり、競合の解決を行うのは非常に困難です。インターフェイス記述をIDLにエクスポートしてCVSにコミットしようとしましたが、Delphiを使用してIDLからTLBを生成する良い方法が見つかりませんでした。さらに、Microsoftが提供するMIDLツールは、delphiからエクスポートしたIDLファイルを正しく解析しませんでした。
visual-studio - /u 引数が機能しない場合、RegSvr32 で最初に追加された COM dll を登録解除するにはどうすればよいですか?
そうです、最初に実行しました:
次に、(偶然にも - 追加するかもしれませんが) もう一度実行したに違いありません。(実際) 'Amazing.dll' の新しいバージョンがリリースされたときにもう一度実行しました。はい-実行する必要があることがわかりました:
事前に - でもねえ!忘れてた。
端的に言うと、VS で COM 参照を追加すると、「Amazing」の 3 つのインスタンスがすべて同じ場所 (c:\Amazing.dll) を指していることがわかります。実行regsvr32 /u
すると、参照の 1 つが削除されます。なし...
これらの参照を取り除くにはどうすればよいですか? 私はregeditシナリオを見ていますか?- その場合 -キーの 1 つを削除するとどうなりますか?
乾杯
multithreading - Sharepoint COMException 0x81020037
1 回の操作で複数のドキュメントのインポートをサポートする SharePoint アプリケーションに取り組んでいます。また、アイテム メタデータの基本的なメンテナンスを実行する ItemAdded イベント ハンドラーもあります。このイベントは、インポートされたドキュメントと手動で作成されたドキュメントの両方に対して発生します。パズルの最後のピースは、ワークフローを開始して別のメタデータ フィールドを更新するために実装したバッチ操作機能です。
SPListItem のファイル データを抽出することで、COMException 0x81020037 を発生させることができます。このファイルは単なる InfoPath フォーム/XML ドキュメントです。XML を変更して、SPListItem に正常にプッシュすることができました。その直後にカスタム機能を起動してメタデータを変更すると、時折 COM エラーが発生します。
エラーメッセージは基本的に、ファイルが別のスレッドによって変更されたことを示しています。カスタム機能がメタデータを変更している間、ItemAdded イベントはまだファイルをデータベースに書き戻しているようです。SPListItem が安全に変更できることを検出するために、遅延とエラー キャッチ ループを挿入しようとしましたが、ほとんど成功しませんでした。
別のスレッドがドキュメントをロックしているかどうかを確認する方法はありますか?
c# - Windows のドラッグドロップでのドロップの通知
私のC#
プログラムには、そこからドラッグして別のプログラムにドロップできるファイルのリストがあります。私の要件は、最初にファイルを別のディレクトリにコピーすることです。
では、操作が成功した場合にのみファイルをコピーできるように、ドロップ操作の通知を受け取ることはできますか? 実際にコピーを実行する前に、コピーする必要があることがわかるまで待ちたいと思います。
また、ドロップ操作がどのプログラムで発生しているかを知ることはできますか? 理想的には、誰または何をドロップするかに基づいてファイルパスを変更したいと思います。
C/C++
これに対する解決策は、任意の .NET 言語またはCOM
.
delphi - タイプ セーフな COM 列挙を実装する方法は?
COM シナリオで Delphi にタイプ セーフな列挙を実装するにはどうすればよいですか? 基本的に、列挙型のプリミティブ定数のセットを、クラスにカプセル化された静的な最終オブジェクト参照のセットに置き換えたいですか? . Java では、次のようなことができます。
カスタマイズされた列挙型を使用して比較を行います。
私は現在、古い Delphi 5 を使用しており、クライアント オブジェクトが必要な列挙型の代わりに整数 (または long) 型を渡さないように、インターフェイスでいくつかの列挙型パラメーターを宣言したいと考えています。ネイティブのデルファイ列挙型を使用する以外に、列挙型を実装するより良い方法はありますか?