我在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
最佳答案
DATE参数类型是问题所在。它不是DateTime或Date,它是Double。声明在WTypes.h SDK头文件中,对于v7.1,行号1025:
typedef double DATE;
因此,通过将其声明为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