問題タブ [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.
dll - COM DLL と Typelib を使用した標準 DLL のどちらが「優れていますか?」
定性的な質問なので、「より良い」を引用符で囲みます。私は数年前から COM DLL を作成しており、Typelib の概念を備えた標準 DLL に出会ったのはつい最近のことです。
Are there any compelling reasons to use COM DLLs instead of DLL+Typelib? Granted, you can't do DCOM with a DLL+Typelib, but is that the only reason?
EDIT I've written COM DLLs in Visual C/C++ 6, Compaq Visual Fortran, Delphi, Visual BASIC 6, ActiveState Perl and a few others. I've written standard DLLs in Visual C/C++ 6, Delphi, Ada and a few others. I've written typelibs for some of my own standard DLLs and also for third party DLLs. The question was originally written in the context of a Delphi DLL+Typelib reimplementation of a VB6 original.
c# - C# または F# から IMetaDataEmit およびその他の MetaData COM インターフェイスにアクセスするにはどうすればよいですか?
F# でコンパイラを作成しており、.net ランタイムでアンマネージ メタデータ COM インターフェイスにアクセスできるようにしたいと考えています。誰かが言及する前に、Reflection.Emit は私の目的には適しておらず、メタデータ COM インターフェイス以外の方法を使用したくありません。
mscoree.tlb をインポートしましたが、必要なインターフェイスが含まれていないようです。
私が興味を持っているインターフェイスには、IMetaDataEmitが含まれます。これに関連するサンプル コードは非常に役に立ちますが、これまでのところ見つけることができませんでした。
C# のサンプルは、F# に簡単に変換できるので問題ありません。
このやや不可解なクエリで私を助けることができる人に前もって感謝します!
更新:インターフェイス GUID を使用して明示的な COM 参照を記述することで、これを並べ替えました。
c# - Windows で使用可能な COM インターフェイスの一覧を取得する方法
GUID を使用して、Windows マシンに登録されている COM インターフェイスのリストを取得する方法はありますか?
これがプログラミングに関係ないと思われる前に、tlbimp が公開していないインターフェイスの F# (または C#) で COM インターフェイスを参照するには、このデータが必要です。
c# - .NET での COM インターフェイスの派生
私の制御不能な会社の制約により、次のシナリオがあります。
次のインターフェイスを定義する COM ライブラリ (CoClass なし、インターフェイスのみ):
両方のインターフェイスを実装し、アプリケーションに上記のサービスを提供する COM (C++ で記述) があります。すべてうまくいっていると思います。
私は.NET(C#)で 新しいものを構築しようIProvider
としています。IService
COM ライブラリのプライマリ相互運用機能アセンブリを構築し、次の C# を実装しました。
これを既存のランタイムに組み込んでみると、NewProvider
COM (C++) からQueryInterface
IServiceProvider 用のオブジェクトを作成できます。IServiceProvider でメソッドを呼び出そうとすると、aSystem.ExecutionEngineException
がスローされます。
私が見つけることができる唯一の他のことは、#import によって作成された .tlh ファイルを見ることです。レガシー COM IExistingProvider クラスが、それが IServiceProvider から派生したことを正しく示していることを示しています。ただし、.NET クラスは IDispatch のベースを示しています。これが兆候なのか、兆候なのか、役に立つのか、それとも何か他のものなのか、私にはわかりません。
com - DLL からエクスポートされたメソッドを一覧表示するツールはありますか?
質問にあるように、管理されていない DLL がエクスポートするメソッドを一覧表示する優れたツールはありますか? COM メソッドとインターフェイスも一覧表示したいと思います。
c# - UIAutomation を使用して古い ActiveX SSUltraGrid を読み取る/操作する方法
ActiveX コントロールを使用した古い Win32 アプリケーションの自動テストを調査しています。私は、Microsoft UIAutomation を使用する White (Thugthworks から) を使用しています。コントロールに関連する AutomationElement を見つけることができますが、それを操作するにはどうすればよいですか?
Spy++ はグリッド コントロールを単一のウィンドウと見なすため、行、列、またはセルと直接対話することはできません。テスト コードから SSUltraGrid コントロールと通信するにはどうすればよいですか?
乾杯ナイジェル
com - 複数のコントロールを持つ単一の VB6 OCX を作成できますか?
私は、多数の個別の OCX ファイルを含む VB6 コードの負荷を継承しました。それぞれのファイルには単一のコントロールが含まれています。2 つの質問があります。
まず、すべての OCX を含む 1 つの OCX ファイルを作成できるように、それらをリファクタリングすることは可能ですか?
第二に、可能であれば、どうすればよいですか?
ティア
c# - C# から C スタイルの配列を受け取る関数の IDL 宣言 (C++)
C++ で記述されたいくつかの COM インターフェイスと C# フロント エンドで構成された既存のコード ベースを使用しています。追加する必要がある新しい機能がいくつかあるため、COM 部分を変更する必要があります。ある特定のケースでは、(C# から割り当てられた) 配列をコンポーネントに渡して入力する必要があります。
私がやりたいことは、次のような C# からメソッドに int の配列を渡すことができるようにすることです。
作業中のいくつかのレンチ:
- C++/CLI またはマネージ C++ は使用できません (この場合、COM は廃止できます)。
- C# 側は /unsafe でコンパイルできません (Marshal の使用は許可されています)。
COM インターフェイスは C# 部分でのみ使用されます (使用されることはありません)。そのため、他の COM コンシューマとの相互運用性についてはあまり関心がありません。32 ビットと 64 ビットの間の移植性も問題ではありません (すべてが 32 ビット マシンからコンパイルおよび実行されるため、コード ジェネレーターはポインターを整数に変換します)。最終的には C++/CLI だけに置き換わる予定ですが、それはまだ先の話です。
私の最初の試み
次のようなものです:
出力 TLB の定義は次のとおりです (妥当なようです)。
これはC#によって次のようにインポートされます(あまり合理的ではありません):
私が使用できるもの
.../unsafe でコンパイルできないことを除いて。
この時点で
私は使っている:
次のようにインポートします。
そして、私はそれを次のように使用する必要があります:
これはうまくいきます...しかし、もっとクリーンな方法を見つけたいです。
それで、質問は
この場合の TLB ジェネレーターからの C# インポートに適した IDL 定義はありますか? そうでない場合、もう少し安全にするために C# 側で何ができるでしょうか?
c++ - C++ の Thread.SetApartmentState に相当するものは何ですか?
C#SetApartmentState
では classにメソッドがありThread
ます。C++ で同じことを行うにはどうすればよいですか?
multithreading - COM:他のスレッドから呼び出すとクラッシュが発生しますが、同じスレッドで実行するにはどうすればよいですか?
他のスレッドでイベントを受信するBHO(IEの拡張機能)を実行しています。他のスレッドからDOMにアクセスすると、IEがクラッシュします。クラッシュしないように、メインのBHOスレッドと同じスレッドからDOMにアクセスさせることは可能ですか?
一般的なCOMマルチスレッドの問題のようですが、私はあまり理解していません。