我有一个遗留的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] 举报,一经查实,本站将立刻删除。