首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可能C#在调用具有可选参数的VB6方法时遇到问题?

是否可能C#在调用具有可选参数的VB6方法时遇到问题?
EN

Stack Overflow用户
提问于 2009-11-06 15:50:08
回答 1查看 528关注 0票数 7

我向VB6 DLL中找到的方法添加了3个可选的布尔参数。它所在的类是MultiUse (public),方法本身是私有的。该类实现了来自TLB的特定接口,允许对此方法进行公开调用。

在VB6端添加了3个可选参数之后,我修改了相关的C#代码,使其指定了3个可选参数。它建造得很好..。但是,当我试图运行该代码时,它会失败,并出现以下错误消息:

MyTLBName.IMyClassName.MyMethod(System.Object,

方法未找到:‘布尔System.String,布尔,布尔,Int32,Int32 ByRef,System.Object,布尔)’。

注意所有3个布尔参数是如何在错误消息中显示的?在我看来很好..。我知道我在从C#调用方法时指定了这3个布尔值。

可疑的是,我在OLEView中查看了OLEView接口,并看到了以下内容:

id(0x60030000)

代码语言:javascript
复制
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个参数是必需的,而不是可选的)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-11-06 16:01:39

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

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

在用VB.Net编写的类中,我按照适当的方法重载来提供几个方法来调用那个VB6函数。

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

代码语言:javascript
复制
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中出现了可选的参数

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1688445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档