問題タブ [dynamic-loading]
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.
flash - AdobeAIRを使用したプラグインアーキテクチャの構築
今後のプロジェクトのクライアント側の実装技術としてAdobeAIRを選択することを考えています。(以前の選択はC#とWPFでしたが、最近Flash / Flex / AIRに本当に感銘を受けました。)
しかし、私の製品の最も重要な機能の1つはプラグインアーキテクチャであり、サードパーティの開発者が機能とGUIを興味深い方法で拡張できるようにします。
C#でアーキテクチャを設計する方法を知っています。プラグインローダーは、ローカルの「app /plugins/」ディレクトリにあるすべてのアセンブリを列挙します。アセンブリごとに、すべてのクラスを列挙し、「IPluginFactory」インターフェースの実装を探します。工場で作成されたプラグインごとに、MVCクラスを要求し、GUI要素(メニュー項目、パネルなど)を既存のGUIレイアウトの適切なスロットにスナップします。
AIR内で同じことを実行したいと思います(Webからではなくローカルファイルシステムからプラグインをロードします)。この記事を読んだ後、私の理解はそれが可能であり、基本的なアーキテクチャ(サンドボックス化されたApplicationDomainsへのSWFのロードなど)は.NETで行う方法と非常に似ているということです。
しかし、私は落とし穴に興味があります。
Flash Playerを使用して動的なクラスローディングを行ったことがある場合(できれば、Flash / Flexの混合アプリで、特にAIRホスト内で)、プラグインフレームワークを構築した経験と、トリッキーな状況に遭遇した場所についてお聞かせください。フラッシュプレーヤー、およびフラッシュ、フレックス、およびAIRAPIを使用します。
たとえば、誰かが私にこれと同じ質問をしたが、Javaプラットフォームを念頭に置いている場合、JVMには「モジュール」または「アセンブリ」の概念がないことは間違いありません。最高レベルの集約は「クラス」であるため、大規模なプロジェクトを管理するためのプラグインシステム内に組織構造を作成することは難しい場合があります。また、複数のクラスローダーの問題と、それぞれがロードされたクラスの独自の個別のインスタンスを(独自の個別の静的変数を使用して)維持する方法についても説明します。
これが私にとってまだ答えられていないいくつかの特定の質問です:
1)actionscript "Loader"クラスは、SWFをApplicationDomainにロードできます。しかし、そのappdomainには正確に何が含まれていますか?モジュール?クラス?MXMLコンポーネントはどのように表現されますか?プラグインインターフェイスを実装するすべてのクラスを見つけるにはどうすればよいですか?
2)メインアプリケーションとは別のApplicationDomainにプラグインをロードした場合、他のappdomain内からコードを呼び出すのはかなり複雑ですか?アプリ間ドメインマーシャリングレイヤーを通過できるデータの種類について、重要な制限はありますか?マーシャリングは法外に高価ですか?
3)理想的には、自分のメインコードの大部分をプラグインとして開発し(メインアプリケーションはプラグイン読み込みシェルにすぎません)、プラグインアーキテクチャを使用してその機能をアプリに追加したいと思います。それはあなたの心に恐怖をもたらしますか?
verilog - 動的にプラグ可能なモジュールを VHDL で実行できますか?
C (組み込み) では、モジュールをロードできる関数ポインター テーブルとアドレス範囲を定義することで、プラグインを実装できます。
これには、領域を割り当てて関数テーブルの場所を定義するリンカー ディレクティブが必要です。
HDL / VHDL または Verilog にも同様のメカニズムはありますか。
私が考えているのは、FPGA 内のゲートのブロックを拡張機能用に定義し、インターフェイスするポートを定義し、後でこのブロックにロジックをロードして特定の操作を実行できるようにすることだと思います。
FPGA はプラグインが配信される通信システムの一部であるため、これは実行時に行う必要があります。
javascript - JavaScript から外部 HTML リソースの読み込みを中止する方法は?
私は JavaScript ウィジェットを作成しています。これは、他の Web サイトで使用することを目的としており、自分の Web サイトから追加のスクリプト ファイルをロードします (クロスドメインの制限により、基本的に XHR がないことを意味します)。ここで、障害を適切に処理したいと考えています。1 つのスクリプトの読み込みに失敗した場合は、別のサーバーからスクリプトを読み込みたいと考えています。
最初のサーバーがエラーを返すサーバー障害を処理することができましたが、タイムアウトも処理したいと考えています。最初のサーバーが応答するのに時間がかかりすぎる場合は、負荷を中止して別のサーバーに切り替えたいと考えています。
私が抱えている問題は、タイムアウトを設定して代替サーバーに切り替えるメソッドをトリガーできることですが、元の要求でブラウザー自体がタイムアウトするまで、代替サーバーからのスクリプトが正常に読み込まれません。私のニーズを待ち望んでいます。
最初の <script> タグのロード中に、ロードを中止し、代替サーバーを指す 2 番目の <script> タグを追加できるようにしたいと考えています。
元のスクリプトの src 属性を null に設定し、removeNode() を使用して HEAD 要素からタグを削除しようとしましたが、効果はありませんでした。
これはすべて Firefox で試しました。IE はまだ試していませんが、解決策は両方で動作する必要があります。提案があればぜひ聞きたいです。
java - Javaクラスを含め、実行時に実行する
「アドオン」インターフェースを必要とするJavaプロジェクトがあります。initialize()
のようなデフォルトのメソッドを持つある種のクラスファイルをロードすることを考えshutdown()
ていました。これは、クラスがアプリケーションにロードされた後に呼び出されます。これはそれを行う方法ですか?この問題にどのようにアプローチしますか?
c++ - C++ での dlsym() および dlopen() の代替
一部で共有ライブラリを使用するアプリケーションがあります。これらのライブラリはコンパイル時にリンクされます。
実行時に、ローダーは共有オブジェクトが にあることを期待します。LD_LIBRARY_PATH
見つからない場合、アプリケーション全体が「共有ライブラリをロードできません」というエラーでクラッシュします。クライアントがライブラリを持っているという保証はないことに注意してください。適切なエラーメッセージを残すアプリケーションも、独立した部分が正しく機能するはずです。
この目的のために、私は共有ライブラリの API を使用していますdlsym()
。dlopen()
これに関する問題は、API に多くの関数がある場合、それらに個別にアクセスする必要dlsym()
があり、私の場合はメモリの破損とコードのクラッシュにつながる ptr を使用する必要があることです。
これに代わるものはありますか?
c# - アセンブリのディレクトリをスキャンしてロードする方法は?
プロジェクトでまだ参照されていないアセンブリのディレクトリをスキャンし、IMyInterface を実装するクラスのすべてのインスタンスをロードしたいと思います。
ここでAssembly.LoadFileメソッドが役立つことはわかっていますが、読み込んでいるアセンブリが既に静的に参照されているかどうかを判断するにはどうすればよいですか? アセンブリを 2 回ロードしたくありません。
actionscript-3 - 2 つの SWF ファイルで使用されている Action Script 3 クラスを、一方の SWF が他方を動的にロードするときに同じクラスに解決するにはどうすればよいですか?
バックグラウンド
純粋な Action Script 3 で高度にモジュール化されたアプリケーションを開発しています (ビルドを自動化するために Flex 4 SDK を使用していますが、すべてのコードは Flash CS4 Professional で直接コンパイルできる必要があります)。
すべてのモジュール間で共有されるインターフェース定義を含む「framework.swc」ファイル、他のモジュールをロードする「mainmodule.swf」、そして他のモジュール用のさまざまな .swf ファイルがあります。クラスを動的にロードするために ApplicationDomain::getDefinition() と組み合わせて Loader クラスを使用しています ["new LoaderContext(false,ApplicationDomain.currentDomain)" を使用します]。
問題
すべてのモジュールは、「framework.swc」で定義されている「AbstractModule」インターフェースを実装しています。ただし、動的にロードされたモジュールをインスタンス化すると (module is AbstractModule) は false を返します。さらに重要なことは、someobject が「framework.swc」で定義されたインターフェイスを実装し、モジュールのメソッドが「framework.swc」で定義された同じインターフェイスのオブジェクトを期待している場合に、module.someMethod(someobject) を呼び出すと、ランタイム エラーが発生することです。 「TypeError: エラー #1034: 型強制に失敗しました: _ を _ に変換できません。」
"mainmodule.swf" と "loadedmodule.swf" (テスト用にロードしたモジュール) は、内部的に、"framework.swc" の共有インターフェイスに別々の定義を使用しているようです。
質問
「mainmodule.swf」と「loadedmodule.swf」が共通のインターフェースを共有定義に解決して、クラスのキャストとクラスの比較が正しく成功するようにするにはどうすればよいですか?
javascript - 要素がスクロールして表示されるときにコンテンツを読み込む
<div>
静的な高さの要素とoverflow: auto;
スタイルの検索結果のリストがあります。最初のx個の検索結果(たとえば20)のみをロードし、ユーザーが検索結果を含む要素の一番下までスクロールすると、別のx個の結果をロードしたいと思います。
誰かが私にこれをどのように行うか説明できますか?いくつかの例を見つけましたが、それらはすべて、単一ではなく、ドキュメント全体のスクロール値を使用しています<div>
。重要な場合は、jQueryを使用しています。
c++ - C++ での DLL の自動ロードを無効にする
私のシナリオは次のとおりです。私のアプリケーションは特定の DLL に依存しています (リンク中にその lib を使用します)。ただし、アプリケーションの実行時に、LoadLibrary を使用してその DLL を明示的にロードしたいと考えています。ただし、既定では、その DLL が必要なスコープにコードが到達すると、環境は自動的にそれを検索して読み込みます。私はこの動作を無効にしたいと考えており、アプリケーションがその DLL に属するコードを実行する必要があるポイントに達した場合は、自動的にロードするのではなくクラッシュすることを好みます (したがって、DLL はロードされるだけです)。明示的に LoadLibrary を呼び出したためです)。
その間、私は遅延ロード機能を使用しています (したがって、ロード トリガーは、DLL を実際にロードする必要がある場合にのみ発生します)。ただし、DLL がまだロードされていない場合は、アプリケーションがクラッシュすることを望みます。
おそらく、これを達成する方法に精通している人はいますか?
c# - インストールされている Microsoft Word Object Library の検出と動的ロード
ちょっとした裏話: Word を使用して、Word テンプレートと会社の Active Directory のデータに基づいて Outlook 署名を生成する小さなアプリケーションがあります。自分のコンピューターでコーディングしたときに「Microsoft Word 12.0 Object Library」を使用したため、Office 2007 を搭載したコンピューターでうまく機能します。
ただし、ネットワーク上には Office 2003 を使用するコンピューターがかなりの数あり、それらのコンピューターでは「Microsoft Word 12.0 Object Library」が見つからないため、左右に例外が発生します。
私の質問は次のとおりです。どのバージョンの Office がインストールされているか、つまりどのバージョンの "Microsoft Word Object Library" が利用可能かを検出し、その後それをロードするにはどうすればよいですか。私が使用している機能は、"Microsoft Word 12.0 オブジェクト ライブラリ" と "Microsoft Word 11.0 オブジェクト ライブラリ" の両方にあると確信しています。
誰かが興味を持っている場合に備えて、署名を生成するために使用されている現在のコードは次のとおりです。
どんな助けでも大歓迎です。上記のコードへの入力も歓迎します。Office Interop ライブラリに対してコーディングした経験がないので、別の方法でできることがあると確信しています。
よろしく、エギル。