问题标签 [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 - 使用 Adobe AIR 构建插件架构
我正在考虑选择 Adobe AIR 作为即将到来的项目的客户端实施技术。(之前的选择是 C# 和 WPF,但最近我对 Flash/Flex/AIR 印象深刻。)
但我的产品最重要的特性之一将是它的插件架构,它允许第三方开发人员以有趣的方式扩展功能和 GUI。
我知道如何在 C# 中设计架构:插件加载器将枚举本地“app/plugins/”目录中的所有程序集。对于每个程序集,它会枚举所有类,寻找“IPluginFactory”接口的实现。对于工厂创建的每个插件,我会询问它的 MVC 类,并将其 GUI 元素(菜单项、面板等)插入现有 GUI 布局中的适当插槽中。
我想在 AIR 中完成同样的事情(从本地文件系统加载插件,而不是从网络加载插件)。阅读本文后,我的理解是这是可能的,并且基本架构(将 SWF 加载到沙盒应用程序域等)与您在 .NET 中执行的方式非常相似。
但我对这些问题很好奇。
如果你们中的任何人使用 flash 播放器进行了任何动态类加载(最好在混合 flash/flex 应用程序中,特别是在 AIR 主机中),我很想听听您构建插件框架的经验以及遇到棘手情况的地方使用 flash 播放器,以及使用 flash、flex 和 AIR API。
例如,如果有人问我同样的问题,但考虑到 Java 平台,我肯定会提到 JVM 没有“模块”或“程序集”的概念。最高级别的聚合是“类”,因此很难在插件系统中创建组织结构来管理大型项目。我还将讨论多个类加载器的问题,以及每个类加载器如何维护自己的加载类的单独实例(具有自己的单独静态变量)。
以下是一些对我来说仍然没有答案的具体问题:
1) 动作脚本“Loader”类可以将 SWF 加载到 ApplicationDomain。但是那个 appdomain 到底包含什么?模块?上课?MXML 组件是如何表示的?如何找到所有实现我的插件接口的类?
2)如果您已将插件加载到与主应用程序不同的 ApplicationDomain 中,那么从该其他应用程序域中调用代码是否会更加复杂?对于可以通过跨应用程序域编组层的数据类型是否有任何重要限制?编组是不是非常昂贵?
3) 理想情况下,我想将我自己的大部分主代码开发为插件(主应用程序只不过是一个插件加载外壳),并使用插件架构将该功能提升到应用程序中。是不是让你心里产生了恐惧?
verilog - 可以在 VHDL 中完成动态可插拔模块吗?
在c(嵌入式)中,可以通过定义函数指针表和模块可以加载到的地址范围来实现插件。
这需要链接器指令来分配空间并定义函数表的位置。
HDL / VHDL或Verilog中是否有类似的机制。
我想我在想的是在 FPGA 中定义一个门块以用于我的扩展功能,定义它将连接到的端口,然后能够将逻辑加载到该块中以执行特定操作。
这必须在运行时进行,因为 FPGA 是交付插件的通信系统的一部分。
javascript - 如何从 JavaScript 中止加载外部 HTML 资源?
我正在编写一个 JavaScript 小部件,它旨在用于其他网站并从我自己的网站加载其他脚本文件(由于跨域限制,这基本上意味着没有 XHR)。现在我想优雅地处理故障 - 如果一个脚本无法加载,我想从备用服务器加载脚本。
我设法处理了第一台服务器返回错误的服务器故障,但我也想处理超时 - 如果第一台服务器响应时间过长,我想中止负载并切换到备用服务器。
我遇到的问题是我可以设置超时来触发切换到备用服务器的方法,但是在浏览器本身对原始请求超时之前,来自备用服务器的脚本不会成功加载 - 这也是渴望我的需要。
我希望能够 - 当第一个 <script> 标记正在加载时 - 中止加载,并添加第二个 <script> 指向备用服务器的标记。
我尝试将原始脚本的 src 属性设置为 null,甚至使用 removeNode() 从 HEAD 元素中删除标签,但没有效果。
这一切都在 Firefox 上尝试过——我还没有尝试过 IE,但解决方案必须在两者上都有效。我很想听听任何建议。
java - 包括 Java 类并在运行时运行它们
我有一个需要“插件”接口的 Java 项目。我正在考虑加载某种具有默认方法的类文件,例如initialize()
,shutdown()
在将类加载到应用程序后将调用该类文件。这是这样做的方法吗?我将如何解决这个问题?
c++ - C++ 中 dlsym() 和 dlopen() 的替代方案
我有一个应用程序,其中一部分使用共享库。这些库在编译时链接。
在运行时,加载程序期望共享对象在 中LD_LIBRARY_PATH
,如果没有找到整个应用程序崩溃并出现错误“无法加载共享库”。请注意,不能保证客户端将拥有该库,在这种情况下我想要应用程序留下合适的错误消息,独立部分也应该正常工作。
为此,我正在使用dlsym()
并dlopen()
使用共享库中的 API。这样做的问题是,如果我在 API 中有很多函数,我必须单独使用dlsym()
和 ptrs 访问它们,这在我的情况下会导致内存损坏和代码崩溃。
有没有其他选择?
c# - 如何扫描目录中的程序集并加载它们?
我想扫描目录中尚未在项目中引用的任何程序集,然后加载实现 IMyInterface 的类的所有实例。
我知道Assembly.LoadFile方法可以帮助我,但我如何确定我正在加载的程序集是否已经被静态引用?我不想两次加载任何程序集。
actionscript-3 - 当一个 SWF 动态加载另一个 SWF 文件时,如何使两个 SWF 文件中使用的 Action Script 3 类解析为同一个类?
背景
我正在使用纯 Action Script 3 开发一个高度模块化的应用程序(我们使用 Flex 4 SDK 来自动化我们的构建,但我们所有的代码都必须能够直接在 Flash CS4 Professional 中编译)。
我们有一个“framework.swc”文件,其中包含在所有模块之间共享的接口定义,我们有一个加载其他模块的“mainmodule.swf”,然后我们有其他模块的各种 .swf 文件。我们使用 Loader 类,结合 ApplicationDomain::getDefinition() 动态加载类[我们使用“new LoaderContext(false,ApplicationDomain.currentDomain)”]。
问题
我们所有的模块都实现了在“framework.swc”中定义的“AbstractModule”接口。但是,当我实例化一个动态加载的模块时,(module is AbstractModule) 返回 false。更重要的是,如果我调用 module.someMethod(someobject),其中 someobject 实现了“framework.swc”中定义的接口,并且模块的方法需要“framework.swc”中定义的相同接口的对象,我会收到运行时错误“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 对象库
一点背景故事:我有一个小型应用程序,它将使用 Word 根据 Word 模板和公司活动目录中的数据生成 Outlook 签名。它在装有 Office 2007 的计算机上运行良好,因为我在自己的计算机上编码时使用了“Microsoft Word 12.0 对象库”。
不过,网络上有不少安装了 Office 2003 的计算机,并且在这些计算机上缺少“Microsoft Word 12.0 对象库”,导致左右出现异常。
我的问题是:如何检测安装了哪个版本的 Office,从而检测到哪个版本的“Microsoft Word 对象库”可用,然后加载它。我很确定我正在使用的功能在“Microsoft Word 12.0 对象库”和“Microsoft Word 11.0 对象库”中。
如果有人感兴趣,这是我当前用于生成签名的代码:
任何帮助都感激不尽。也欢迎输入上面的代码;我没有任何针对 Office 互操作库进行编码的经验,因此我确信我可以做一些不同的事情。
最好的问候,埃吉尔。