このエラーは、Googleを使用して他の多くの参照を見つけましたが、私がやっていることにどのように当てはまるのか分かりません。.NET COM Interop DLLでオブジェクト配列を使用するとエラーが発生する
コンパイル時に「関数またはインターフェイスが制限付きとしてマークされているか、関数がVisual Basicでサポートされていないオートメーションタイプを使用しています」というVBAエラーがあります。エラーが発生し
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
別の問題があります.VBAにはネイティブの64ビット整数型がありません。 FileSizeをIntegerまたはDoubleとして再定義するとどうなるかチェックしてください。 –
データタイプに対するあなたのコメントは、この問題に対する答えでした。 VBAのコードはコンストラクタを決して初期化しないので、実際には私は上記のようにコンストラクタを使用しています。唯一の違いは、FileSizeをSingleに変更したことです。あなたの答えを編集する気に?私はあなたの現在の答えが間違った情報であると言っているわけではありません、それは私が持っていた問題に対する答えではないということだけです。 – HK1