加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 07:26:55 所属栏目:百科 来源:网络整理
导读:我有一个遗留的VB6应用程序,它定义了以下结构: Public Type DrawDown Date As Date Amount As Currency CapitaliseInterest As BooleanEnd Type 使用tlbimp.exe生成互操作程序集,但结构最终如下: [StructLayout(LayoutKind.Sequential,Pack = 4)]public st
我有一个遗留的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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读