我有一个遗留的 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/