問題タブ [late-binding]
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# - ref パラメータがある場合に C# から動的に VB6 COM オブジェクトを呼び出すにはどうすればよいですか?
C# から呼び出したい次のレガシー VB6 関数があります。
C# で次のコードを使用していますが、例外が発生します。
例外は次のとおりです。
に変更しようとしref
ましout
たが、同じエラーが発生します。を省略した場合、メソッドはエラーなしで実行されますが、渡されるはずのオブジェクトが含まれているのではなくref
、もちろんnull のままです。miscRepayment
アップデート
私は、VB.NET を使用するなど、他の方法をいくつか試しました (VB.NET は常に C# よりも COM に適しているため)。
次の VB.NET コードを使用します。
次のような似ていますが異なる例外がスローされます。
興味深いことに、C# または VB.NET のサンプル コードの呼び出しをnull
/Nothing
の代わりに使用するように変更するとmiscRepayment
、コードは例外をスローせずに実行されます。VB6 COM オブジェクトのコードにブレークポイントを設定したところ、コードがその端で正しく実行されたことを確認できました。明らかに、miscRepayment
パラメーターをnull
/Nothing
に設定すると、.NET で作成されたオブジェクトを受け取る方法がなくなります。問題は、パラメーターのマーシャリングに関係している必要があります。
また、パラメーターとしてマークType.InvokeMember
する引数を使用してみましたが、次の例外が発生します。ParameterModifier
miscRepayment
ref
最後に、次の VB.NET コードを試しました。
次の例外がスローされます。
例外をスローするすべてのコードで、VB6 COM オブジェクトが呼び出されることはありません。パラメータをマーシャリングしようとすると、COM 相互運用コードが詰まる必要がありref
ます。
Google 検索で を使用した例をいくつか見つけましたType.InvokeMember
が、ref
パラメーターは常に整数や文字列などの単純な型用です。
vb.net - vb.net でリフレクションを介して非アセンブリ (非管理) dll のメソッドを呼び出していますか?
リフレクションを使用して、vb.net で dll (アセンブリではなく、管理されていない、おそらく COM オブジェクト モデル) を動的に呼び出したいと考えています。
.net アセンブリである dll 内のメソッドを呼び出すいくつかの異なる方法を見てきましたが、user32.dll や winmm.dll などの dll 内でメソッドを動的に呼び出す方法は見つかりませんでした。これは遅延バインディングと呼ばれると思いますか?
私が質問している理由は、さまざまな機能を外部ライブラリに依存する言語を構築しているためです。
例(私が構築しているこの言語で):
winmm.dll で mciSendString を呼び出すためのインタープリターをビルドする場合、リフレクションを使用してこれを処理するにはどうすればよいですか? ユーザーが希望する dll/メソッドを参照できるようにしたい。
正しい方向へのガイダンスを得ることができますか?おそらく、私が分解して理解できるvb.netコードでさえありますか?
c++ - 「外部」定義変数を使用したライブラリへの遅延バインディング
プログラムをDLLにレイトバインドしようとしています。
メソッドをインポートする方法は知っていますが、ヘッダーファイルの1つに、次のような定義があります。
「未解決の外部シンボル」エラーを取得せずに、プログラムでこの変数を参照するにはどうすればよいですか?
c# - 指定されたキャストは無効です遅延バインディングを使用して MailItem.AddressEntry から MAPIOBJECT を取得しています
Outlook で遅延バインディングを使用して、MailItem.AddressEntry の MAPIOBJECT を取得しようとしています。
「呼び出しのターゲットによって例外がスローされました」と「指定されたキャストが無効です」という内部例外が発生し続けていますが、その理由がわかりません。Google検索などでは何も出てきません。
まず、MAPIOBJECT は非推奨であり、インテリセンスでは表示されませんが、機能することを知っています。
遅延バインディングなしで問題なくオブジェクトを取得できます。
コードは次のとおりです。
vba - 実行時バインディングを使用してライブラリを使用する前に、実行時バインディングを使用してライブラリの存在を確認できますか?
開発中のメソッド名などのオートコンプリートが好きなので、VBAプロジェクトでアーリーバインディングを使用するのが好きです。また、メソッド名のスペルを間違えた場合にコンパイラーが警告を表示するという自信も気に入っています。
ただし、早期バインディングを使用するには、関連するライブラリ(たとえば、「Microsoft ScriptingRuntime」)への参照を追加する必要があります。これは、そのような「標準」ライブラリには問題ありませんが、ユーザーのマシンに存在する場合と存在しない場合があるライブラリを使用したい場合があります。
理想的には、ライブラリが存在しない場合(「xyzがこのコンピューターにインストールされていないため、この機能を使用できない」など)に役立つメッセージを表示したいと思います。遅延バインディングのみを使用している場合は、次のことができます。
ただし、アーリーバインディングを使用するためにライブラリへの参照を追加した場合、ライブラリが存在しないと、VBAプロジェクトの読み込み時にコンパイルエラーが発生します。したがって、どのコードも実行されません(ライブラリが存在しないことを検出するコードを含む)。
このキャッチ22を回避する方法はありますか?
java - リアルタイムの例を使用した Java でのリフレクションとレイト バインディングの違い
Java のチュートリアルを勉強しているときに、Reflection と Late Binding に戸惑いました。一部のチュートリアルでは、両者は同じであり、Reflection と Late Binding に違いはないと書いています。しかし、他のチュートリアルでは違いがあると言われています。
私は混乱しているので、誰かがリフレクションとレイトバインディングがJavaで何であるかを説明してもらえますか?可能であれば、両方の実際の例をいくつか教えてください.
ありがとう..
c++ - 異なるプロジェクトで使用されるヘッダーで宣言された純粋な抽象C++クラス(コンパイル時のリンクなし)は、同じ仮想テーブルモデルを共有しますか?
純粋仮想メソッドのみで構成されるクラスを宣言するC++ヘッダーがあります。そのヘッダーを使用する2つのDLLがあります(1つはそのインターフェイスを実装しています)が、コンパイル時にリンクされていません。一方のDLLは、もう一方のDLLを動的にロードし、実装されたインターフェイスのポインタをもう一方に渡します。これらのDLLは同じ仮想テーブル構造を共有していますか?
java - Javaでパラメータのサブクラスを処理するためにメソッドをオーバーロードする方法は?
どうやって解決すればいいのかわからないデザインの問題があります。基本的に、私はビジターを使用して特定のクラスのインスタンスを更新しています。将来的には、Updateクラスの拡張として、さまざまな種類の更新を実装できるようにしたいと考えています。また、さまざまな種類のオブジェクト(すべて基本クラスから派生)を更新できるようにしたいです。ので、私は持っています:
にインスタンスがありList<A>
、各オブジェクトに最も具体的な更新を適用したいと思います。ただし、リストの要素の1つに更新を適用しようとするvisit(A)
と、より具体的な要素ではなく、常に呼び出されます。それは、そうList<A>
ではないからだと思いますが、ポリモーフィズムがそれを処理することを期待します。CとBを区別しないことが理にかなっている場合があるため、演算子を削除することはできません。メッセージをオーバーロードにディスパッチせずにこれを解決する方法について何か考えがありますか?List<B>
List<C>
visit(A)
visit(A)
ありがとうございました
vb.net - VB.NET はこれをどのようにオブジェクト プロパティに解決しますか?
わかりました、私は C# コーダーであり、VB.NET を読むことさえ困難です。信じられないほどばかげた質問になるかもしれませんが、ご容赦ください。しかし、次のようなコードがあります。
では、おそらく構文が間違っているという事実を無視して、VB.NET は sourceObject から Name プロパティを取得する方法を教えてください。実行時に調べると、sourceObject が Name という名前のプロパティを getter でサポートするタイプであることがわかりますが、この場合、VB.NET は何をするのでしょうか? これを何らかの方法で実行時に自動的にキャストするために、コンパイラによって生成されている追加のコードはありますか?
お察しのとおり、少し混乱しています。前もって感謝します!
c# - .NET <4でC#コードをレイトバウンドにするための最も侵襲性の低い方法は何ですか?
私は、Windowsフォームコントロールを処理するC#コードの一部に取り組んでいます。これは小さな例です。いくつかのコントロールの境界矩形(画面座標)を取得するための小さなラッパーです。
このコードは、顧客のアプリケーションにロードされる「プラグイン」として配布されるライブラリにコンパイルされます。ただし、一部の顧客は、私のプラグインがリンクされているものとは異なるバージョンのWindowsフォームをアプリケーションで使用していることが判明しました。私の計画は、上記のコードをレイトバウンドにすることでこれに取り組むことでした。これにより、現在のアプリケーションドメインにロードされているWindowsフォームのバージョンに関係なく機能するようになります。.NET 4では、dynamic
キーワードを使用できましたが、残念ながら、このコードは.NET3アプリケーションでも機能するはずです。したがって、私はリフレクションAPIの使用を開始し、リフレクションAPIの使用を少し良くする小さなヘルパーオブジェクトを導入しました。
あまりきれいではありません。発信者側では多くのキャストが必要であり、遅かれ早かれオーバーロードされたメソッドやプロパティにも対処する必要があると思います。理想的には、ラッパーオブジェクトを使用すると、元のコードをほとんど同じに保つことができます。
したがって、LateBoundObject
ラッパークラスの修正を開始する前に、リフレクションAPIを使用してC#コードをレイトバウンドにした経験がある人はいますか?もしそうなら、生のリフレクションAPIを使用する苦痛を最小限に抑えるために、どのようにアプローチしましたか?また、のラインに沿ってラッパークラスを使用しましたか、LateBoundObject
それともまったく異なるルートを使用しましたか?元のコードに関する限り、最も侵襲性の低い方法を探しています。