类型支持

更新:2007 年 11 月

下表描述类型的类别以及将类型从托管上下文封送到非托管上下文的结果。

类型类别

下表对以下几节讨论的类型中的几种类型进行了描述和分类。

类型

说明

值类型

值类型直接包含描述的数据,从堆栈中分配值类型的内存。

内置值类型

Int32UInt32BooleanSingle,等等。有关完整列表,请参见 .NET Framework 类库概述

用户定义的值类型

System.ValueType 派生。在 C# 中,用户定义的值类型是使用 struct 关键字定义的。

枚举

枚举也是值类型。.NET Framework 中的枚举的基础类型为 Int32。不过,您可以显式定义一个枚举,使之具有其他基础类型。受支持的基础类型可以是除 Char 之外的任何整数基类型。

引用类型

引用类型存储对堆中分配的对象内存的引用。它们可以是内置的类、用户定义的类、数组、装箱的值类型、委托等。

托管类型到非托管类型

下表描述了将托管类型封送到非托管类型的结果。

托管类型

非托管类型

值类型(大于 32 位)

未修改的。

对值类型的引用

指向值类型的指针。

64 位整数

指向值类型数组的指针。

浮点型数字

浮点型数字。

值类型数组

指向值类型数组的指针。

Enum

枚举的基础值类型。

ANSI 字符串

仅当作为字节数组传递时才受支持。

String

指向 Unicode (wchar_t) 字符的空终止数组的指针。非托管代码不应该修改该数组。

引用类型

指向对象的基础数据字段的指针。引用类型始终按顺序封送。您可以只封送包含值类型成员的对象。

对引用类型的引用

不受支持。

引用类型的数组

不受支持。

委托

函数指针

StringBuilder

指向 Unicode (wchart_t) 字符的空终止数组的指针。非托管代码可以修改该数组。

C# 和 Visual Basic 封送处理结果

下表列出了封送拆收器用于托管类型的 C# 和 Visual Basic 类型,其中 Windows CE 是承载非托管代码的操作系统。该表并不全面。

托管代码

C# 类型

托管代码

Visual Basic 类型

非托管代码

ByVal

非托管代码

ByRef

bool

Boolean

BYTE

BYTE *

int

Integer

INT32

INT32 *

short

Short

SHORT

SHORT *

long

Long

LONG

INT64 *

char

Char

WCHAR

WCHAR *

float

Single

FLOAT

FLOAT *

double

Double

DOUBLE

DOUBLE *

string

String

WCHAR *

不支持

StringBuilder

StringBuilder

WCHAR *

不支持

DateTime

DateTime

DATE

DATE *

int[]

Integer()

INT32 *, INT32[]

不支持

变量类型支持

下表列出了 IDispatch 封送拆收器所支持的 VARENUM 枚举中的类型,该封送拆收器用于从托管代码向非托管代码进行封送。在任何情况下,参数和返回值都支持这些类型。不受支持的类型包括那些不适用于变量类型的类型。

支持的类型

不受支持的类型

VT_I2

VT_I4

VT_CY

VT_DATE

VT_BSTR

VT_DISPATCH

VT_ERROR

VT_BOOL

VT_VARIANT

VT_UNKNOWN

VT_DECIMAL

VT_I1

VT_UI1

VT_UI2

VT_UI4

VT_INT

VT_UINT

VT_ARRAY

VT_R8

VT_R4

VT_CF

VT_CLSID

VT_EMPTY

VT_NULL

VT_I8

VT_UI8

VT_USERDEFINED

VT_RECORD

VT_SAFEARRAY(使用 VT_ARRAY)

VT_PTR

VT_HRESULT

VT_VOID

VT_CARRAY

VT_LPSTR(使用 VT_BSTR)

VT_LPWSTR(使用 VT_BSTR)

VT_FILETIME

VT_BLOB

VT_STREAM

VT_STORAGE

VT_STREAMED_OBJECT

VT_STORED_OBJECT

VT_BLOB_OBJECT

VT_VECTOR

请参见

其他资源

.NET Compact Framework 中的封送处理支持