問題タブ [iunknown]

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.

0 投票する
1 に答える
527 参照

object - COM IUnknown と CoGetClassObject を呼び出す前に、最初に COM IUnknown へのポインタが必要ですか?

COM で、ある COM サーバー オブジェクトのインスタンスを作成したい場合、最初にその IUnknown インターフェイスへのポインタを取得してから、CoGetClassObject を使用してクラス オブジェクトを作成する必要がありますか?

私が理解している限り、IUnknown はオブジェクトの有効期間を管理するために使用されるため、クライアントが作成したいオブジェクトが何であれ、最初に IUnknown インターフェイスの実装へのポインターが必要です。

正しく聞こえますか?そうでない場合、誰かがそれがどのように機能するか教えてもらえますか?

0 投票する
2 に答える
1877 参照

c# - C# プロジェクトの謎のインターフェイスに関する警告

C# ソリューションをビルドするたびに、見たことも書いたこともないインターフェイスに関するいくつかの警告が表示されます。それらのいくつかについてグーグルを試しましたが、ヒットしませんでした。これらは、私が参照しているアセンブリに埋もれている可能性がありますか? もしそうなら、これらの警告を消す方法はありますか?

インターフェイス 'IAlertable' は [デュアル] としてマークされていますが、IDispatch から派生していません。IUnknown 派生インターフェイスとして変換されます。

インターフェイス 'ICustomizationPermissionsReports' は [デュアル] としてマークされていますが、IDispatch から派生していません。IUnknown 派生インターフェイスとして変換されます。

インターフェイス 'IAlertable2' は [デュアル] としてマークされていますが、IDispatch から派生していません。IUnknown 派生インターフェイスとして変換されます。

0 投票する
3 に答える
8992 参照

delphi - Delphi:IUnknownのQueryInterfaceを実装する方法は?

Delphiでは、次のIUnknownように宣言されています。

注:出力パラメーターは型指定されていません

私のTInterfacedObject子孫ではQueryInterface、を処理する必要があるので、要求されたインターフェイスをサポートするオブジェクトを返すことができます。

問題は次のようになります。

Delphiは文句を言います:

このオペランドタイプに適用できない演算子

明らかに、型指定されていない outパラメータにどのように、または何を割り当てるかはわかりません。コンパイラが文句を言うのをやめることを期待して、私はランダムに物事を試すことができます:

私が書いたすべてのコードを無視する(必要な場合):QueryInterfaceオブジェクトの子孫にどのように実装しますTInterfacedObjectか?


私が解決しようとしてきた本当の問題は、私がしたいことに要約することができます:

インターフェイスのメソッドをオーバーライドしたい

同じやり方で:

子孫クラスでオーバーライドできます:

私はインターフェースでも同じことをしたいです:

問題は、実装オブジェクトのロードをどのように開始する必要があるかということです。

そして、には2つのメソッドだけでなく、IFoo6つのメソッドがあります。次に、サポートされている別のインターフェイスを追加する場合は、次のようにします。

そして、物事は非常に速く扱いにくくなります。

0 投票する
3 に答える
2959 参照

c++ - IUnknownインターフェイスは、すべての新しいCOMクラスで再実装する必要がありますか?

この質問が誰にとっても明白であると思われる場合は申し訳ありませんが、私はCOMを初めて使用します。ここにあるチュートリアルhttp://www.codeguru.com/cpp/com-tech/activex/tutorials/article.php/c5567から、C ++で作成されたすべてのCOMクラスは、独自のQueryInterface、AddRef、およびReleaseを実装する必要があるようです。 。これらのメソッドは、新しいクラスに対して基本的に同じ実装を持つ必要があるため、開発者向けに抽象クラスやそれを実装するものがない理由がわかりません。非常に多くの人がすでに何度も実装しているのと同じものを再実装する必要がある理由がわかりません(チュートリアルが間違っていて何かがある場合を除く)。

ありがとう

0 投票する
1 に答える
849 参照

c# - IHTMLDocument2 が IHTMLDocument2.body.document と等しくないのはなぜですか?

次の doc2 が doc22 と異なるのはなぜですか?

0 投票する
4 に答える
4336 参照

com - IUnknown :: QueryInterface()は参照カウントをインクリメントしますか?

を持っている場合、終了時に呼び出すことに加えて、を介して取得するすべてのインターフェイスをIUnknown *ptr呼び出す必要がありますか?Release()ptr->QueryInterface()ptr->Release()ptr

以前は答えは「はい」だと思っていましたが、MSDNからのこの引用は私を混乱させました。

場合によっては、オブジェクトへの弱参照を取得する必要があります(つまり、参照カウントをインクリメントせずにそのインターフェイスの1つへのポインターを取得したい場合があります)が、その後に.を呼び出してこれを行うことはできませんQueryInterfaceRelease

なぜそれが問題になるのかわかりません-ptr->QueryInterface()呼び出しReleaseてから結果のポインタを呼び出す場合、オブジェクトの参照カウントはまだ正の値であるべきではありませんか?それはどのようにして無効なポインタになりますか?

0 投票する
1 に答える
719 参照

com - .Net の RCW COM オブジェクト作成パラメーター (つまり、要求されたインターフェイス) を管理する方法は?

C# .NET アプリケーションで外部のネイティブ COM コンポーネントを使用しています。

この COM DLL にはタイプ ライブラリがないため、相互運用コードを自分で作成する必要があり、TlbImp のように include/idl ファイルを作成しました。しかし、最悪のことは、オブジェクトの作成が次のように失敗することです。

ネイティブを使用し、実装されたインターフェイス IID の 1 つをCoCreateInstance指定すると、最終的にクラスが作成されます。class_id

結局のところ、問題は COM オブジェクトがパラメーターとして渡されたIClassFactory::CreateInstanceものをサポートしていないため、返されることにあります(逆アセンブラーとデバッガーで特定しました)。コンポーネントは MS SQL VDI です。IID_IUnknownriidCLASS_E_CLASSNOTAVAILABLE

CreateInstance.NET RCW に別のインターフェイス ID をメソッドに渡すよう強制する方法はありIID_IUnknownますか? 私はネットをたくさん検索しましたが、これに対する解決策は見つかりませんでした。

回避策として、現在は C++/CLI を使用してオブジェクトを作成し、IID_IUnknownこの目的ではなく適切なインターフェイスを要求しています。しかし、C++/CLI ではプラットフォームごとに異なる DLL をビルドする必要があるため、C# でコードを作成したいと考えています。

ありがとう

0 投票する
1 に答える
232 参照

c#-4.0 - IUnknown と Typelib で動的に動作します

現在、私は C#4 の動的プログラミングを試していますが、動的キーワードがどのような状況で機能するかを完全には理解していませんでした。呼び出し元に型情報を自動的に通知できるため、IDispatch で動作することは明らかです。しかし、IUnknown とタイプ ライブラリでも動作するはずではありませんか? ( http://samgentile.com/Web/vs2010-and-net-framework-4-0/c-4-0-bcl-4-series-dynamic-primitive-type-part-1/であいまいなIUnknown へのバインディングが可能であることを示唆しています。)

  • IUnknown w/o typelib: 動作しないはずです。インターフェイスは C# で明示的に記述する必要があるため、試しませんでした。( C# 4.0 動的オブジェクトおよび IShellItem などの WinAPI インターフェイスで Hans Passant によって確認されました (C# ソースで定義せずに) 。)
  • IUnknown with type lib: 明確な情報が見つからないため、それが機能するかどうか、およびどのように機能するかはまったくわかりません。(タイプ ライブラリを COM dll にリンクしましたが、DLR はメソッドをバインドできませんでした。)

IUnknown with type lib は C# の dynamic キーワードで動作しますか? - もしそうなら、私は何をしなければなりませんか?

0 投票する
3 に答える
777 参照

c++-cli - ManagedC++でIUnknownを表す

C#を介して.NETアプリケーションで使用されるC静的ライブラリ用のC ++/CLIでラッパーを構築しています

私はCでこのような機能を持っています

IUnknown **C ++/CLIで宣言する方法

最初の引数として、私はIntPtrを使用していますが、IUknownの代替品を見つけることができません。

別の関数に別のCOMデータ型GUIDがありますが、これも問題です。

データ型IUnknownおよびGUIDのリレースを見つけるのを手伝ってください。

0 投票する
1 に答える
1440 参照

delphi - XE2 で IDispatch をキャストするアクセス違反

古いコード (Binh Ly によって作成された ComLib.pas) を使用しているため、(OleVariant) オブジェクトで列挙型インターフェイスを使用できます。

このコードは、Delphi 2010 および 2007 では機能しますが、XE2 では機能しません。上記の行 (コメント「RAISES EXCEPTION」を含む) で、例外が発生します。

プロジェクト x.exe は例外クラス $C0000005 を発生させ、メッセージ「0xbaadf00d でのアクセス違反: アドレス 0xbaadf00d の読み取り」が発生しました。

渡されたオブジェクトには TDispNewEnum インターフェイスがあるため、例外は発生しません(Delphi 2010 および 2007 の場合と同様)。

提案?ありがとう。