Mat*_*ghi 6 c# vb6 com interface typelib
我在VB6 DLL中找到的方法中添加了3个可选的布尔参数.容纳它的类是MultiUse(公共),方法本身是私有的.该类实现TLB的特定接口,允许公共调用此方法.
在VB6端添加3个可选参数后,我修改了相关的C#代码,以便指定3个可选参数.它构建得很好...但是,当我尝试运行该代码时,它失败并显示以下错误消息:
找不到方法:'Boolean MyTLBName.IMyClassName.MyMethod(System.Object,System.String,Boolean,Boolean,Int32,Int32 ByRef,System.Object,System.Object,System.Object,Boolean,Boolean,Boolean)'.
请注意错误消息中是如何显示所有3个布尔参数的?看起来很好......我知道在从C#调用方法时我指定了3个布尔值.
可疑,我检查了OLEView中的MyTLBName.IMyClassName接口,并看到了这个:
[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);
Run Code Online (Sandbox Code Playgroud)
同样,3个可选参数是可见的,看起来很好.
在我看来它应该工作......但也许我错过了一些东西.
有没有什么方法可以让我无需在TLB中创建另一个版本的"MyMethod"?(使用不同的名称,并根据需要而不是可选的3个参数)
目前,C#在使用可选参数调用VB6函数时遇到问题.我在一个项目上非常努力地进行了这个项目,我绝对需要使用外部供应商提供的VB6组件.
我发现最简单的解决方案是在VB中创建一个类来调用这些函数,因为VB.Net DOES支持可选参数,然后从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
Run Code Online (Sandbox Code Playgroud)
等等...
看起来可选参数将在4.0中出现:http://geekswithblogs.net/michelotti/archive/2009/02/05/c-4.0-optional-parameters.aspx
归档时间: |
|
查看次数: |
503 次 |
最近记录: |