4

idl ファイルで定義されたインターフェイスがあり、vb6 プロジェクトを vb.net に変換しようとしています。

変換により、この idl の tlb から相互運用性が作成され、vs2010 では、プロパティが実装されていないと文句を言います (以下に示すように)。誰かが理由を知っていますか?私は実装を削除し、vs2010 でスタブを再生成しましたが、それでもエラーが発生しました。

idl..のインターフェースの例

[   uuid(...),
    version(2.0),
    dual,
    nonextensible,
    oleautomation
]
interface IExampleInterface : IDispatch
{
 ...
    [id(3), propget]
    HRESULT CloseDate ([out, retval] DATE* RetVal);
    [id(3), propput]
    HRESULT CloseDate ([in] DATE* InVal);
}

VB.Net クラス...

<System.Runtime.InteropServices.ProgId("Project1_NET.ClassExample")>
Public Class ClassExample
    Implements LibName.IExampleInterface

    Public Property CloseDate As Date Implements LibName.IExampleInterface.CloseDate
        Get
            Return mDate
        End Get
        Set(value As Date)
            mDate = value
        End Set
    End Property
4

1 に答える 1

2

DATE 引数の型が問題です。これはDateTime または Date ではなくDoubleです。宣言は、WTypes.h SDK ヘッダー ファイルの v7.1 の行番号 1025 に記載されています。

 typedef double DATE;

したがって、プロパティを As Double と宣言して修正し、必要に応じて前後に変換します。

Public Property CloseDate As Double Implements LibName.IExampleInterface.CloseDate
    Get
        Return mDate.ToOADate
    End Get
    Set(value As Date)
        mDate = DateTime.FromOADate(value)
    End Set
End Property
于 2012-11-20T10:13:18.850 に答える