COM 接口 return 可以是整数而不是长整数吗?
Can a COM interface return a integer instead of a long?
这是我的 class 和关联的界面:
[Guid("xx")]
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IStudentItem
{
string Type { get; set; }
DateTime Week { get; set; }
int Study { get; set; }
}
[Guid("yy")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class StudentItem : IStudentItem
{
public string Type { get; set; }
public DateTime Week { get; set; }
public int Study { get; set; }
}
如您所见,Study
定义为 int
。
但是在 MFC 方面,当我使用这个 属性 时,我最终得到一个 long
:
long lStudyNumber = 0;
if(SUCCEEDED(studentItem->get_Study(&lStudyNumber)))
oEntry.iStudyPoint = static_cast<int>(lStudyNumber);
我的 DLL 有 86x 和 64x 两个版本。有什么方法可以让 get_Study
属性 变成 return 一个 integer
吗?
你为什么要这个。使用对所有 OS 和位数中的数据有意义的适当类型。
你可以使用整数。 COM 知道 MIDL 编译器和 TLB(类型库)内部的 __int3264 类型,甚至 VARIANT 也有 VT_INT 类型。
因此 IDispatch 驱动的自动化也将接收相应的值。
但请注意,即使有一些封送处理,当您有 64 位外部 COM 服务器并且 32 位进程请求数据时,封送处理程序会将之前的 VT_INT 转换为 VT_I8。 .. 另一方面,32 位外部 COM 服务器将 return 一个 VT_INT 作为一个 VT_I4 到 64 位进程...
这是我的 class 和关联的界面:
[Guid("xx")]
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IStudentItem
{
string Type { get; set; }
DateTime Week { get; set; }
int Study { get; set; }
}
[Guid("yy")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class StudentItem : IStudentItem
{
public string Type { get; set; }
public DateTime Week { get; set; }
public int Study { get; set; }
}
如您所见,Study
定义为 int
。
但是在 MFC 方面,当我使用这个 属性 时,我最终得到一个 long
:
long lStudyNumber = 0;
if(SUCCEEDED(studentItem->get_Study(&lStudyNumber)))
oEntry.iStudyPoint = static_cast<int>(lStudyNumber);
我的 DLL 有 86x 和 64x 两个版本。有什么方法可以让 get_Study
属性 变成 return 一个 integer
吗?
你为什么要这个。使用对所有 OS 和位数中的数据有意义的适当类型。
你可以使用整数。 COM 知道 MIDL 编译器和 TLB(类型库)内部的 __int3264 类型,甚至 VARIANT 也有 VT_INT 类型。
因此 IDispatch 驱动的自动化也将接收相应的值。
但请注意,即使有一些封送处理,当您有 64 位外部 COM 服务器并且 32 位进程请求数据时,封送处理程序会将之前的 VT_INT 转换为 VT_I8。 .. 另一方面,32 位外部 COM 服务器将 return 一个 VT_INT 作为一个 VT_I4 到 64 位进程...