将NULL从VB6窗口传递给.NET可空Int32

mig*_*lla 1 c# vb6 int interop nullable

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

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

这可能吗?如果是这样,我需要从VB6传递给NULL我的.NET方法有什么价值?

Han*_*ant 6

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

TlbExp:警告TX8013117D:键入库导出器警告处理'IFoo.test(arg),ClassLibrary1'.警告:类型库导出器在签名中遇到泛型类型实例.通用代码可能无法导出到COM.

这是由以下产生的:

[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IFoo {
    void test(int? arg);
}
Run Code Online (Sandbox Code Playgroud)

生成的类型库将具有test()方法.它无法调用.它抱怨的通用类型是Nullable<T>你的Int32?这是一个简写符号.

简而言之,您的C#根本不适合从像VB6这样的COM客户端使用.您必须将参数声明更改为object.首先测试null,然后测试为(短),VB6的自然拟合.或者使用Convert.ToInt32()灵活地了解客户端使用的值类型.