Vb.net 将对象数组与.NET COM互操作DLL一起使用时出错

Vb.net 将对象数组与.NET COM互操作DLL一起使用时出错,vb.net,vba,com-interop,Vb.net,Vba,Com Interop,我在谷歌上找到了很多关于这个错误的其他参考资料,但我很难理解它们是如何应用到我正在做的事情上的 下面是我在编译时遇到的VBA错误:“函数或接口标记为受限,或者函数使用Visual Basic不支持的自动化类型。” 导致错误的VBA代码: 'ftp is also a com object created in code not posted here Dim f() As wooxter.FTPFile f = ftp.GetFileList 'Returns an object array o

我在谷歌上找到了很多关于这个错误的其他参考资料,但我很难理解它们是如何应用到我正在做的事情上的

下面是我在编译时遇到的VBA错误:“函数或接口标记为受限,或者函数使用Visual Basic不支持的自动化类型。”

导致错误的VBA代码:

'ftp is also a com object created in code not posted here
Dim f() As wooxter.FTPFile
f = ftp.GetFileList 'Returns an object array of type FTPFile
Dim i As Integer
For i = 1 To (UBound(f) - 1)
    If fFileExists(stg.LocalPicDir & "\" & f(i).FileName) = True Then
        If fGetFileSize(stg.LocalPicDir & "\" & f(i).FileName) = f(i).FileSize Then
        'Error occurs on the above line at compile time
            'The error occurs specifically on f(i).FileSize, but not on f(i).FileName
            'fGetFileSize returns a VBA Long. f(i).FileSize is a VB.NET Long
    End If
    End If
Next
以下是我的相关.NET代码:

Public Interface IFTPFile
    ReadOnly Property FileSize() As Long
    ReadOnly Property FileName() As String
End Interface

<ClassInterface(ClassInterfaceType.None)> _
Public Class FTPFile : Implements IFTPFile
    Private sFileName As String = ""
    Private lFileSize As Long

    Public Sub New(ByVal FName As String, ByVal FSize As Long)
        sFileName = FName
        lFileSize = FSize
    End Sub
End Class

'Fragment of a different class
Public Function GetFileList() As FTPFile() Implements IFTP.GetFileList
    Dim ftpfiles() As EnterpriseDT.Net.Ftp.FTPFile
    ftpfiles = fCon.GetFileInfos
    Dim result(ftpfiles.Length - 1) As FTPFile
    For i As Integer = 0 To ftpfiles.Length - 1
        result(i) = New FTPFile(ftpfiles(i).Name, ftpfiles(i).Size)
    Next
    Return result
End Function
公共接口IFTPFile
只读属性FileSize()的长度为
只读属性FileName()作为字符串
端接口
_
公共类FTPFile:实现IFTPFile
Private sFileName As String=“”
私人文件大小与长度相同
Public Sub New(ByVal FName为字符串,ByVal FSize为长)
sFileName=FName
lFileSize=FSize
端接头
末级
'另一个类的片段
公共函数GetFileList()作为FTPFile()实现IFTP.GetFileList
将ftpfiles()设置为enterpriseedt.Net.Ftp.FTPFile
ftpfiles=fCon.GetFileInfos
尺寸结果(ftpfiles.Length-1)为FTPFile
对于i,作为整数=0到ftpfiles.Length-1
结果(i)=新的FTPFile(ftpfiles(i).名称,ftpfiles(i).大小)
下一个
返回结果
端函数

COM没有构造函数的概念。或者更确切地说,是带参数的构造函数。如果为类声明任何构造函数,那么它必须包含无参数构造函数。客户端代码将始终使用的。您需要创建文件名和文件大小属性


下一个问题是VBA没有64位整数数据类型。将FileSize属性从Long更改为整数或双精度。避免使用单数,因为它没有足够的有效数字来准确存储文件大小。它无法存储16777217。

尽我所能,我的VBA代码不应该触发类构造函数。此外,我更改了代码,使其只使用空构造函数,而在同一位置仍会收到相同的错误消息。还有一个问题,VBA没有本机的64位整数类型。检查将FileSize重新定义为整数或双精度时会发生什么情况。您对数据类型的注释就是问题的答案。事实上,我正在使用上面列出的构造函数,因为我在VBA中的代码永远不会初始化构造函数。唯一的区别是我把文件大小改成了单文件。想编辑你的答案吗?我并不是说你目前的答案是错误的信息,只是它不是我遇到的问题的答案。