c# - 为什么 COM Interop 将 VB6 bool 值视为 C# 短整数?

标签 c# .net com vb6 com-interop

我有一个遗留的 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 Boolean 被翻译成 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.

关于c# - 为什么 COM Interop 将 VB6 bool 值视为 C# 短整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9011584/

相关文章:

c# - IQueryable 投影到 DTO - 自动映射器在这种情况下可以提供帮助吗?

c# - MVC 5 IValidatableObject 不显示错误消息?

c# - 将附加信息与 .NET 枚举相关联

c++ - 如何在 C++ 中读/写 excel 复选框状态

c# - C# 语言命令的 Razor 语法

c# - 安装 Xamarin-Forms 应用程序后应用程序崩溃

C# COM 互操作 : exposing function with a managed object as parameter

c# - COM 互操作是否尊重程序集加载的 .NET AppDomain 边界?

c# - 无法注册时间触发的后台任务

.net - 我应该从 ASP.NET MVC 1 还是 MVC 2 Beta 开始?