C# 将NULL从VB6窗口传递到.NET可为NULL的Int32

C# 将NULL从VB6窗口传递到.NET可为NULL的Int32,c#,vb6,interop,int,nullable,C#,Vb6,Interop,Int,Nullable,我有一个VB6窗口,它调用.NET方法,将控件值的输入传递给C#代码 我希望能够将NULL传递给(Int32?)的C#参数,但我在VB6代码中没有找到允许我这样做的任何内容 这可能吗?如果是这样,我需要从VB6传递什么值才能在.NET方法中获得NULL?尝试不向参数传递任何内容。它充当空值。尝试不向参数传递任何内容。它充当空值。您不能。事实上,在VB6项目中甚至看不到该方法。在.NET程序集上运行Tlbexp.exe应始终生成类似以下内容的警告: TlbExp:警告TX8013117D:类型库导

我有一个VB6窗口,它调用.NET方法,将控件值的输入传递给C#代码

我希望能够将
NULL
传递给(
Int32?
)的C#参数,但我在VB6代码中没有找到允许我这样做的任何内容


这可能吗?如果是这样,我需要从VB6传递什么值才能在.NET方法中获得
NULL

尝试不向参数传递任何内容。它充当空值。

尝试不向参数传递任何内容。它充当空值。

您不能。事实上,在VB6项目中甚至看不到该方法。在.NET程序集上运行Tlbexp.exe应始终生成类似以下内容的警告:

TlbExp:警告TX8013117D:类型库导出器警告处理“IFoo.test(arg),ClassLibrary1”。警告:类型库导出程序在签名中遇到泛型类型实例。通用代码不能导出到COM

由以下机构制作:

[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IFoo {
    void test(int? arg);
}
生成的类型库将没有test()方法。不能叫它。它抱怨的泛型类型是
可空的
,即您的Int32?是那个的简写符号


长话短说,您的C#根本不适合从VB6这样的COM客户端使用。必须将参数的声明更改为object。首先测试null,然后转换为(短),这是VB6的自然匹配。或者使用Convert.ToInt32()灵活处理客户端使用的值类型。

您不能。事实上,在VB6项目中甚至看不到该方法。在.NET程序集上运行Tlbexp.exe应始终生成类似以下内容的警告:

TlbExp:警告TX8013117D:类型库导出器警告处理“IFoo.test(arg),ClassLibrary1”。警告:类型库导出程序在签名中遇到泛型类型实例。通用代码不能导出到COM

由以下机构制作:

[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IFoo {
    void test(int? arg);
}
生成的类型库将没有test()方法。不能叫它。它抱怨的泛型类型是
可空的
,即您的Int32?是那个的简写符号


长话短说,您的C#根本不适合从VB6这样的COM客户端使用。必须将参数的声明更改为object。首先测试null,然后转换为(短),这是VB6的自然匹配。或者使用Convert.ToInt32()灵活处理客户端使用的值类型。

Variant
s如果调用正确,在VB6中可以为null。如何将其封送到.NET我不确定。。因为据我记忆,它不是一个“纯null”(如果有这样的东西)。@SimonWhitehead是的,但是如果C#参数是一个可为null的int,我可以不传递任何东西或也为空吗?不确定。。测试这个理论会很快…@SimonWhitehead是的,我什么都没试过,空的,vbNull(这是一个值,不确定VB6是否一般都有)。到目前为止运气不好,只是出现了一个异常。您的另一个选择是为其分配一个无效值。。如果业务规则适合,那么说,
-1
。然后您可以检查它。
Variant
s在VB6中可以为空,如果我没有记错的话。如何将其封送到.NET我不确定。。因为据我记忆,它不是一个“纯null”(如果有这样的东西)。@SimonWhitehead是的,但是如果C#参数是一个可为null的int,我可以不传递任何东西或也为空吗?不确定。。测试这个理论会很快…@SimonWhitehead是的,我什么都没试过,空的,vbNull(这是一个值,不确定VB6是否一般都有)。到目前为止运气不好,只是出现了一个异常。您的另一个选择是为其分配一个无效值。。如果业务规则适合,那么说,
-1
。如果我不使用任何东西作为输入参数,它会生成一个编译器错误如果我不使用任何东西作为输入参数,它会生成一个编译器错误,这正是我得到的错误!我也这么想(也很害怕),无论如何,非常感谢:)你总是提到你看到的错误消息是非常重要的。为每个人节省了很多时间,谷歌也很喜欢它。不管怎样,谢谢。这正是我犯的错误!我也这么想(也很害怕),无论如何,非常感谢:)你总是提到你看到的错误消息是非常重要的。为每个人节省了很多时间,谷歌也很喜欢它。无论如何,谢谢你。