C#编程COM对象中的长类型在VB6中显示为不受支持的变量类型

C#编程COM对象中的长类型在VB6中显示为不受支持的变量类型,c#,.net,com,vb6,C#,.net,Com,Vb6,我有一个用C#编写的DLL,我正在将其转换为COM对象,以便在VB6应用程序中使用。有几个方法和属性被定义为longtype,当在VB6中访问时,最终显示为“不受支持的变量类型”。然后我注意到在C中定义的函数如下: 在我的VB6对象浏览器中显示为: Sub Load(firstNumber As <Unsupported variant type>, firstCheckDigit As Long, lastNumber As <Unsupported variant type

我有一个用C#编写的DLL,我正在将其转换为COM对象,以便在VB6应用程序中使用。有几个方法和属性被定义为
long
type,当在VB6中访问时,最终显示为“不受支持的变量类型”。然后我注意到在C中定义的函数如下:

在我的VB6对象浏览器中显示为:

Sub Load(firstNumber As <Unsupported variant type>, firstCheckDigit As Long, lastNumber As <Unsupported variant type>, lastCheckDigit As Long)
子加载(firstNumber为,firstCheckDigit为,lastNumber为,lastCheckDigit为,lastCheckDigit为)

显然,这种转换的某些方面正在将C#
int
类型转换为VB6
Long
类型,这对我来说不是问题。但是,在C#和VB6中,我确实需要将
firstNumber
lastNumber
变量设置为
long
。后端上的变量不能是
int
,因为输入的某些值的大小。有没有办法做到这一点?还是DLL端的长类型与COM对象不兼容?

准确地说,VB6没有64位整数类型


您需要使用int或double来容纳它。后者当然是令人不快的,但您确实从中得到了15位数字。

Int
在.NET(32位)和VB6(16位)中的含义不同。所以C#的Int变成了VB6长(32位)。VB6中没有与.NET
Long
(64位)类似的代码-您真的需要这种精度吗?@YuriyGalanter您应该在回答中提供一些支持文档:)。你会得到我的支持票。@DavidL它就在那里:)例如互操作考虑。如果您正在与非为.NET Framework编写的组件进行接口,例如自动化或COM对象,请记住Integer在其他环境中具有不同的数据宽度(16位)。如果要将16位参数传递给此类组件,请在新的Visual Basic代码中将其声明为Short而不是Integer。这是VB.NET,但它是一样的。如果OP愿意,我会将此作为answer@YuriyGalanter我确实喜欢。这些数字(可能)是10位数字,因此我以前使用过10位数字中过大的数字(大约20亿位限制以北)时会出现溢出。您可以将它们作为字符串传递吗?我认为
货币
十进制
也可以。
Sub Load(firstNumber As <Unsupported variant type>, firstCheckDigit As Long, lastNumber As <Unsupported variant type>, lastCheckDigit As Long)