微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么COM Interop将VB6布尔值视为C#Short?

我有一个遗留的VB6应用程序,它定义了以下结构:

Public Type DrawDown
    Date As Date
    Amount As Currency
    CapitaliseInterest As Boolean
End Type

使用tlbimp.exe生成互操作程序集,但结构最终如下:

[StructLayout(LayoutKind.Sequential,Pack = 4)]
public struct DrawDown
{
    public DateTime Date;
    [MarshalAs(UnmanagedType.Currency)]
    public decimal Amount;
    public short CapitaliseInterest;
}

我正在使用.NET 4.0.

为什么VB6布尔值被转换为C#short而不是bool?

解决方法

VB6使用VARIANT_BOOL类型,

在这里找到关于它的信息和历史:BOOL vs. VARIANT_BOOL vs. BOOLEAN vs. boo

Off to the side came VARIANT_BOOL.

typedef short VARIANT_BOOL; define VARIANT_TRUE ((VARIANT_BOOL)-1) define VARIANT_FALSE ((VARIANT_BOOL)0) This was developed by the Visual Basic folks. Basic uses -1 to represent “true” and 0 to represent “false”,and VARIANT_BOOL was designed to preserve this behavior.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐