gpt4 book ai didi

c# - C# 是否有可能在调用具有可选参数的 VB6 方法时出现问题?

转载 作者:太空狗 更新时间:2023-10-29 21:42:20 24 4
gpt4 key购买 nike

我向 VB6 DLL 中的一个方法添加了 3 个可选的 bool 参数。容纳它的类是 MultiUse(公共(public)),方法本身是 Private。该类实现来自 TLB 的特定接口(interface),允许公开调用此方法。

在VB6端添加了3个可选参数后,我修改了相关的C#代码,使其指定了3个可选参数。它构建良好...但是,当我尝试运行该代码时,它失败并显示以下错误消息:

Method not found: 'Boolean MyTLBName.IMyClassName.MyMethod(System.Object, System.String, Boolean, Boolean, Int32, Int32 ByRef, System.Object, System.Object, System.Object, Boolean, Boolean, Boolean)'.

请注意错误消息中如何显示所有 3 个 bool 参数?对我来说看起来不错...我知道我在从 C# 调用方法时指定了这 3 个 bool 值。

可疑,我检查了 OLEView 中的 MyTLBName.IMyClassName 接口(interface),看到了这个:

[id(0x60030000)]

HRESULT MyMethod(
//Cut out the other parameters - they are working fine.
[in, optional, defaultvalue(-1)] VARIANT_BOOL blnMyFirstOptionalBoolean,
[in, optional, defaultvalue(-1)] VARIANT_BOOL blnMySecondOptionalBoolean,
[in, optional, defaultvalue(-1)] VARIANT_BOOL blnMyThirdOptionalBoolean,
[out, retval] VARIANT_BOOL* __MIDL_0324);

同样,3 个可选参数是可见的,看起来不错。

在我看来它应该可以工作...但也许我遗漏了一些东西。

有什么方法可以使它工作而不必在 TLB 中创建另一个版本的“MyMethod”? (使用不同的名称,并且这 3 个参数是必需的而不是可选的)

最佳答案

目前,C# 在调用带可选参数的 VB6 函数时确实存在问题。在我绝对需要使用外部供应商提供的 VB6 组件的项目中,我非常努力地使用这个。

我发现最简单的解决方案是在 VB 中创建一个类来调用这些函数,因为 VB.Net 确实支持可选参数,然后从 C# 调用该 VB6 类。

在用 VB.Net 编写的类中,我按照正确的方法重载提供了几种方法来调用一个 VB6 函数。

示例 - 假设 VB6 函数有三个参数,第一个是必需的,第二个是可选的,我将在 VB.Net 组件中创建三个函数。

Public Sub CallComponent(byVal myParameter as Integer)
....call component with one parm
End Sub

Public Sub CallComponent(byVal myParameter as Integer, byVal parm2 as String,)
....call component with two parms
End Sub

等...

而且可选参数似乎会出现在 4.0 中:http://geekswithblogs.net/michelotti/archive/2009/02/05/c-4.0-optional-parameters.aspx

关于c# - C# 是否有可能在调用具有可选参数的 VB6 方法时出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1688445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com