你不能.实际上,您甚至无法在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()灵活地了解客户端使用的值类型.