問題タブ [vtable]
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 - COMコクラスのvtableを反復する方法は?
公開されたインターフェイスのメソッドを実装する COM コクラスの vtable を反復/アクセスするにはどうすればよいですか?
インターフェイスの公開されたメソッドのすべてのアドレスが格納されている vtable の部分にアクセスする必要があります。
たとえば、Math は COM オブジェクトであり、その公開インターフェイスは「Operations」であり、「Sum」はこのインターフェイスのメソッドです。「Sum」のアドレスを取得するにはどうすればよいですか?
com - co-classのvtableを読んで関数アドレスに対して関数名を取得する方法は?
COM 公開インターフェイス メソッドの vtable からアドレスを読み取って、co-class 関数を呼び出す必要があります。アドレスを読み取る一般的な方法が必要です。
次に、TLB から収集した特定のアドレス (NOT KNOWN) 引数 (パラメーター) と名前を持つ関数を呼び出す必要があります。そのアドレスが、これから呼び出す関数名にどのように対応するか。
このためには、関数アドレスを保持している vtable をトラバースする必要があります。最後に、関数アドレスをその関数の名前に対応させる必要があります。これは、私は知りません。どのように?同じ名前の複数の関数が vtable に表示される場合があります (オーバーロードの場合)。その場合、関数名とそのアドレスを区別する必要があります。取り組む方法は?よろしくウスマン
敬具サー.!!
特定のCOM ExeまたはCOM DLLのすべての関数シグネチャを引き出してグリッドまたはユーザーへのインターフェイスに表示する必要があるユニットテストフレームワークを設計しているため、後でそのリストから特定の関数シグネチャを選択することで、彼/彼女その関数に引数(パラメーターとしてのデータ)を提供した後、その関数を実行できます。これはすべて実行時に動的に行われ、実行時にユーザーが必要とする関数が呼び出されます。
これは、さまざまな方法で実現できます。
TLB (タイプ ライブラリ) を提供することで、すべての関数シグネチャを取得し、すべてのシグネチャをグリッド コントロールまたはツリー コントロールに表示できます。2 番目のステップは、データを提供して実行時にこれらの関数を呼び出すことです。呼び出しには、データと関数のアドレス (または名前) が必要です。ユーザーからデータを取得するGUIパネルまたはコントロールがあり、そのデータが引数になります。
今、私が以前に投稿した本当の問題が発生します。コクラスによって実装された COM コンポーネントによって公開されたそのインターフェイスの関数/メソッドへの呼び出し。これには、 component によって公開されたインターフェイスの vtable をたどり、その関数のアドレスを見つけてから、関数として呼び出す予定のアドレスが本当にそれであるかを知る必要があります。したがって、これにはそのアドレスを関数名に変換する必要があり、文字列を比較して、ユーザーが署名を表示するツリー コントロールからクリックした関数名が本当にその関数名であるかどうかを判断します。
提案または推奨事項はありますか?
c++ - gdbを使用したC++のポリモーフィッククラスのvtable
仮想関数を持つ基本クラスオブジェクトへのポインタを使用してvtableを表示するにはどうすればよいですか?
c++ - 純粋仮想関数は C++ のどこにありますか?
純粋仮想機能を配置する仮想テーブルはどれですか? 基本クラスまたは派生クラスで?
たとえば、仮想テーブルは各クラスでどのように見えるでしょうか?
c++ - Qt リンカ エラー:「vtable への未定義参照」
これは私のヘッダーです:
これは私のクラスです:
リンカー エラーが発生します。
- これは、仮想メソッドが実装されていないことを意味します。しかし、私のクラスには仮想メソッドがありません。
- 原因かと思いベクターをコメントアウトしましたが、エラーは消えませんでした。
- は
Message
複雑struct
ですが、代わりに使用int
しても問題は解決しませんでした。
c++ - C++ には、vtable を使用しないインターフェイスの静的ポリモーフィズム実装がありますか?
C++ には、vtable を使用しないインターフェイスの適切な実装がありますか?
例えば
最後の行の func への呼び出しは、vtable に移動して BaseInterfaceImpl::func の func ptr を見つけますが、BaseInterfaceImpl は純粋なインターフェイス クラス BaseInterface 以外の他のクラスからサブクラス化されていないため、直接それを行う C++ の方法はありますか?
ありがとう。ギル。
c# - COM関数のアドレスを取得するときに例外が発生したのはなぜですか?
タイプライブラリ(TLB)をロードし、とを使用してタイプを反復処理することにより、COM関数のアドレスを取得していITypeLib
ますITypeInfo
。ITypeInfoの関数を呼び出した後AddressOfMember
、次の例外に直面しています。
System.Runtime.InteropServices.COMException(0x800288BD):操作のモジュールの種類が間違っています。(HRESULTからの例外:0x800288BD(TYPE_E_BADMODULEKIND))at System.Runtime.InteropServices.ComTypes.ITypeInfo.AddressOfMember(Int32 memid、INVOKEKIND invKind、IntPtr&ppv)。
この例外を取り除くにはどうすればよいですか?
c# - ITypeLibとITypeInfoを使用してC#.NETから実行時にCOMアンマネージコードを呼び出す方法は?
C#.NETからアンマネージCOMコードを呼び出す必要があります。(LoadTypeLibEx)からアンマネージCOMタイプライブラリをロードすることにより、COMTLBによって公開されたすべてのタイプを反復処理できます。実行時に、またはCOM vtableの開始アドレスにアクセスして、インターフェイスでこれらの公開されたメソッドのアドレスを取得するためにインデックスを適用することにより、これらの公開されたメソッドを呼び出すアドレスを知る必要があります。
c++ - 速度の比較 - テンプレートの特殊化 vs. 仮想関数 vs. If ステートメント
邪魔にならないように...
Premature optimization is the root of all evil
Make use of OOP
etc.
理解します。今後の参考のために、灰白質に保存できる特定の操作の速度に関するアドバイスを探しています。
Animation クラスがあるとします。アニメーションは、ループする (何度も再生する) か、ループしない (1 回再生する) か、一意のフレーム時間を持つかどうかなどを指定できます。これらの「どちらかまたは」属性が 3 つあるとします。Animation クラスのどのメソッドも、せいぜいこれらのいずれかをチェックすることに注意してください (つまり、これは if-elseif の巨大なブランチの場合ではありません)。
ここにいくつかのオプションがあります。
1) 上記の属性のブール値メンバーを与え、適切なアクションを実行するためにアニメーションを再生するときに if ステートメントを使用してそれらをチェックします。
- 問題: アニメーションが再生されるたびに条件がチェックされます。
2) 基本アニメーション クラスを作成し、LoopedAnimation や AnimationUniqueFrames などの他のアニメーション クラスを派生させます。
- 問題:
vector<Animation>
. また、考えられるすべての組み合わせに対して個別のクラスを作成すると、コードが肥大化するように見えます。
3) テンプレートの特殊化を使用し、それらの属性に依存する関数を特殊化します。のようにtemplate<bool looped, bool uniqueFrameTimes> class Animation
。
- 問題: これに関する問題は、
vector<Animation>
何かのアニメーションに対して を使用できないことです。むくむこともあります。
これらのオプションのそれぞれがどのような速度を提供するのだろうか? 3 番目のオプションでは s の一般的なコンテナーを反復処理できないため、1 番目と 2 番目のオプションに特に興味がありますAnimation
。
要するに、vtable fetch と条件付きのどちらが高速ですか?
c++ - なぜ仮想テーブルが必要なのですか?
仮想テーブルに関する情報を探していましたが、わかりやすいものが見つかりませんでした。
誰かが私に説明付きの良い例を教えてもらえますか?