问题标签 [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
,该方法执行没有错误,但当然miscRepayment
仍然是 null 而不是包含应该传递出去的对象。
更新
我尝试了其他一些方法,包括使用 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 对象永远不会被调用。ref
尝试编组参数时,COM 互操作代码必须阻塞。
在我的 Google 搜索中,我遇到了一些使用的示例Type.InvokeMember
,但ref
参数始终用于简单类型,例如整数和字符串。
vb.net - 通过vb.net中的反射调用非汇编(非托管)dll中的方法?
我想使用反射在 vb.net 中动态调用 dll(不是程序集、非托管、可能是 COM 对象模型)。
我见过几种不同的方法来调用 .net 程序集的 dll 中的方法 - 但我还没有找到动态调用 dll 中的方法(如 user32.dll 或 winmm.dll)的方法。我相信这会被称为后期绑定?
我问的原因是因为我正在构建一种语言,该语言将依赖于外部库来实现许多不同的功能。
一个例子(用我正在构建的这种语言):
当我在 winmm.dll 中为调用 mciSendString 构建解释器时,如何使用反射来处理这个问题?我希望用户能够引用他们希望的任何 dll/方法。
我可以在正确的方向上获得一些指导吗?也许甚至是一些我可以分解和理解的 vb.net 代码?
c++ - 后期绑定到带有“外部”定义变量的库
我正在尝试将我的程序后期绑定到 DLL。
我知道如何导入它的方法,但在它的头文件中,我有一个这样的定义:
如何在我的程序中引用此变量而不会出现“未解析的外部符号”错误?
c# - 使用后期绑定从 MailItem.AddressEntry 获取 MAPIOBJECT 的指定转换无效
我正在尝试使用 Outlook 后期绑定来获取 MailItem.AddressEntry 的 MAPIOBJECT。
我不断收到“调用目标引发了异常”和“指定转换无效”的内部异常,我不知道为什么。谷歌搜索等没有出现任何内容。
首先,我知道 MAPIOBJECT 已被弃用,并且通过智能感知不可见,但可以工作。
如果没有后期绑定,我可以毫无问题地获得对象。
这是代码:
vba - 我可以在通过早期绑定使用库之前使用后期绑定来检查库的存在吗?
我喜欢在我的 VBA 项目中使用早期绑定,因为我喜欢在开发过程中自动完成方法名称等。我也喜欢知道如果我拼错了方法名,编译器会警告我的信心。
但是,要使用早期绑定,我需要添加对相关库的引用(例如,“Microsoft Scripting Runtime”)。这对于像这样的“标准”库来说很好,但有时我想使用用户机器上可能存在或不存在的库。
理想情况下,如果库不存在,我想显示一条有用的消息(例如“此计算机上未安装 xyz,因此无法使用此功能”)。如果我只使用后期绑定,那么我可以这样做:
但是,如果我添加了对该库的引用以使用早期绑定,那么如果该库不存在,则在加载 VBA 项目时会出现编译错误。因此,没有代码运行(包括检测库不存在的代码)。
这个catch-22有什么办法吗?
java - java中反射和后期绑定的区别与实时示例
在学习 Java 教程时,Reflection 和 Late Binding 让我很困惑。在一些教程中,他们写道它们都是相同的,并且反射和后期绑定之间没有任何区别。但是其他教程说有区别。
我很困惑,所以有人可以解释一下 Java 中的反射和后期绑定是什么,如果可能的话,请给我一些真实世界的例子。
谢谢..
c++ - 在不同项目中使用的头文件中声明的纯抽象 C++ 类(没有编译时链接)是否共享相同的虚拟表模型?
我有一个 C++ 标头声明一个仅由纯虚拟方法组成的类。我有两个使用该头文件的 DLL(其中一个实现了该接口),但在编译时没有链接。一个 DLL 动态加载另一个,将已实现接口的指针传递给另一个。这些 DLL 是否共享相同的虚拟表结构?
java - 如何重载一个方法来处理Java中参数的子类?
我有一个设计问题,我无法弄清楚如何解决。基本上我正在使用访问者来更新某个类的实例。我希望将来能够实现不同类型的更新,作为我的更新类的扩展。我还希望能够更新不同类型的对象(都派生自基类)。所以我有:
我有我的实例List<A>
,我想对每个对象应用最具体的更新。但是,当我尝试将更新应用于列表的元素之一时,我总是会visit(A)
被调用,而不是更具体的元素。我想那是因为它是List<A>
, not List<B>
or List<C>
,但我希望多态性能够解决这个问题。我不能只删除visit(A)
运算符,因为有时不区分 C 和 B 是有意义的。您知道如何在不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
或者您是否采用了完全不同的路线?就原始代码而言,我正在寻找侵入性最小的方式。