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 位进程...