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