2011-03-28 15 views
0

このエラーは、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 

答えて

1

COMは、コンストラクタの概念はありません。それ以上の点では、引数を持つコンストラクタです。あなたのクラスのコンストラクタを宣言する場合は、それはパラメータのないコンストラクタを含んでいなければなりません。クライアントコードが常に使用するもの。 FileNameプロパティとFileSizeプロパティを作成する必要があります。

次の問題は、VBAに64ビットの整数データ型がないことです。 FileSizeプロパティをLongからIntegerまたはDoubleに変更します。 Singleを避け、ファイルサイズを正確に格納するのに有効な数字が足りません。それは16777217を格納することはできません。

+0

私は私のVBAコードは、クラスコンストラクタを発生させるべきではないと伝えることができます。また、コードを変更して、空のコンストラクタ以外は使用しないで、同じ場所に同じエラーメッセージが表示されるようにしました。 – HK1

+0

別の問題があります.VBAにはネイティブの64ビット整数型がありません。 FileSizeをIntegerまたはDoubleとして再定義するとどうなるかチェックしてください。 –

+0

データタイプに対するあなたのコメントは、この問題に対する答えでした。 VBAのコードはコンストラクタを決して初期化しないので、実際には私は上記のようにコンストラクタを使用しています。唯一の違いは、FileSizeをSingleに変更したことです。あなたの答えを編集する気に?私はあなたの現在の答えが間違った情報であると言っているわけではありません、それは私が持っていた問題に対する答えではないということだけです。 – HK1

関連する問題