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

磁共振成像

你为什么要这个。使用对所有操作系统和位数中的数据有意义的适当类型。

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

因此,IDispatch 驱动的自动化也将收到相应的值。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章