2011-03-28 50 views
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 

回答

1

COM有沒有構造函數的概念。或者更重要的是,帶參數的構造函數。如果你爲你的類聲明瞭任何構造函數,那麼它必須包含一個無參數的構造函數。客戶端代碼將始終使用的那個。您需要創建FileName和FileSize屬性。

接下來的問題是,VBA不具有64位的積分數據類型。將FileSize屬性從Long更改爲,例如Integer或Double。避免Single,它沒有足夠的有效數字來準確存儲文件大小。它不能存儲16777217.

+0

儘可能靠近我可以告訴我的VBA代碼應該永遠不會觸發類的構造函數。此外,我改變了我的代碼,所以它不使用任何東西,只是一個空的構造函數,我仍然在同一個地方得到相同的錯誤信息。 – HK1 2011-03-28 18:39:13

+0

還有一個問題,VBA沒有原生的64位整數類型。檢查將FileSize重新定義爲整數或雙精度時會發生什麼。 – 2011-03-28 18:45:10

+0

您對數據類型的評論是對問題的回答。事實上,我正如上面列出的那樣使用構造函數,因爲我在VBA中的代碼永遠不會初始化構造函數。唯一的區別是我已經將FileSize更改爲Single。謹慎編輯你的答案?我並不是說你目前的答案是錯誤的信息,只是它不是我遇到的問題的答案。 – HK1 2011-03-28 19:00:22