0
我发现了很多其他引用此错误使用谷歌,但我有麻烦弄明白它们如何适用于我在做什么。错误使用对象数组.NET COM互操作DLL
这里的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
尽可能靠近我可以告诉我的VBA代码应该永远不会触发类的构造函数。此外,我改变了我的代码,所以它不使用任何东西,只是一个空的构造函数,我仍然在同一个地方得到相同的错误信息。 – HK1 2011-03-28 18:39:13
还有一个问题,VBA没有原生的64位整数类型。检查将FileSize重新定义为整数或双精度时会发生什么。 – 2011-03-28 18:45:10
您对数据类型的评论是对问题的回答。事实上,我正如上面列出的那样使用构造函数,因为我在VBA中的代码永远不会初始化构造函数。唯一的区别是我已经将FileSize更改为Single。谨慎编辑你的答案?我并不是说你目前的答案是错误的信息,只是它不是我遇到的问题的答案。 – HK1 2011-03-28 19:00:22