COM接口可以返回整数而不是长整数吗?

时间:2017-08-20 15:26:41

标签: mfc com

这是我的班级和相关界面:

[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属性返回integer

1 个答案:

答案 0 :(得分:1)

你为什么要这样?使用适合所有操作系统和位数的数据的类型。

你可以使用int。 COM知道MIDL编译器和TLB(类型库)中的__int3264类型,甚至VARIANT也有VT_INT类型。

因此,IDispatch驱动的自动化也将获得相应的价值。

但请注意,即使有一些编组,当你有64位外部COM服务器和32位进程请求数据时,编组器会将之前的VT_INT转换为VT_I8 ...另一方面是32位外部COM服务器将VT_INT作为VT_I4返回到64位进程...