VarEnum 枚举
指示当数组作为 UnmanagedType.SafeArray 从托管代码封送到非托管代码时,如何封送该数组的元素。
**命名空间:**System.Runtime.InteropServices
**程序集:**mscorlib(在 mscorlib.dll 中)
语法
声明
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration VarEnum
用法
Dim instance As VarEnum
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum VarEnum
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum class VarEnum
/** @attribute SerializableAttribute() */
/** @attribute ComVisibleAttribute(true) */
public enum VarEnum
SerializableAttribute
ComVisibleAttribute(true)
public enum VarEnum
成员
成员名称 | 说明 | |
---|---|---|
VT_ARRAY | 指示 SAFEARRAY 指针。 | |
VT_BLOB | 指示以长度为前缀的字节。 | |
VT_BLOB_OBJECT | 指示 Blob 包含对象。 | |
VT_BOOL | 指示一个布尔值。 | |
VT_BSTR | 指示 BSTR 字符串。 | |
VT_BYREF | 指示值为引用。 | |
VT_CARRAY | 指示 C 样式数组。 | |
VT_CF | 指示剪贴板格式。 | |
VT_CLSID | 指示类 ID。 | |
VT_CY | 指示货币值。 | |
VT_DATE | 指示 DATE 值。 | |
VT_DECIMAL | 指示 decimal 值。 | |
VT_DISPATCH | 指示 IDispatch 指针。 | |
VT_EMPTY | 指示未指定值。 | |
VT_ERROR | 指示 SCODE。 | |
VT_FILETIME | 指示 FILETIME 值。 | |
VT_HRESULT | 指示 HRESULT。 | |
VT_I1 | 指示 char 值。 | |
VT_I2 | 指示 short 整数。 | |
VT_I4 | 指示 long 整数。 | |
VT_I8 | 指示 64 位整数。 | |
VT_INT | 指示整数值。 | |
VT_LPSTR | 指示一个以 NULL 结尾的字符串。 | |
VT_LPWSTR | 指示由 空引用(在 Visual Basic 中为 Nothing) 终止的宽字符串。 | |
VT_NULL | 指示空值(类似于 SQL 中的空值)。 | |
VT_PTR | 指示指针类型。 | |
VT_R4 | 指示 float 值。 | |
VT_R8 | 指示 double 值。 | |
VT_RECORD | 指示用户定义的类型。 | |
VT_SAFEARRAY | 指示 SAFEARRAY。在 VARIANT 中无效。 | |
VT_STORAGE | 指示随后是存储的名称。 | |
VT_STORED_OBJECT | 指示存储包含对象。 | |
VT_STREAM | 指示随后是流的名称。 | |
VT_STREAMED_OBJECT | 指示流包含对象。 | |
VT_UI1 | 指示 byte。 | |
VT_UI2 | 指示 unsignedshort。 | |
VT_UI4 | 指示 unsignedlong。 | |
VT_UI8 | 指示 64 位无符号整数。 | |
VT_UINT | 指示 unsigned 整数值。 | |
VT_UNKNOWN | 指示 IUnknown 指针。 | |
VT_USERDEFINED | 指示用户定义的类型。 | |
VT_VARIANT | 指示 VARIANTfar 指针。 | |
VT_VECTOR | 指示简单的已计数数组。 | |
VT_VOID | 指示 C 样式 void。 |
备注
与 System.Runtime.InteropServices.MarshalAsAttribute 一起使用以显式控制 SafeArray 的元素类型。
示例
Imports System
Imports System.Runtime.InteropServices
Module MyModule
' If you do not have a type library for an interface
' you can redeclare it using ComImportAttribute.
' This is how the interface would look in an idl file.
'[
'object,
'uuid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26"),
'dual, helpstring("IMyStorage Interface"),
'pointer_default(unique)
']
'interface IMyStorage : IDispatch
'{
' [id(1)]
' HRESULT GetItem([in] BSTR bstrName, [out, retval] IDispatch ** ppItem);
' [id(2)]
' HRESULT GetItems([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT)* pItems);
' [id(3)]
' HRESULT GetItemDescriptions([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT) ** ppItems);
' [id(4), propget]
' HRESULT get_IsEmpty([out, retval] BOOL * pfEmpty);
'};
' This is the managed declaration.
<ComImport(), Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")> _
Public Interface IMyStorage
<DispId(1)> _
Function GetItem(<InAttribute(), MarshalAs(UnmanagedType.BStr)> ByVal bstrName As String) _
As <MarshalAs(UnmanagedType.Interface)> Object
<DispId(2)> _
Function GetItems(<InAttribute(), MarshalAs(UnmanagedType.BStr)> ByVal bstrLocation As String, _
<OutAttribute(), MarshalAs(UnmanagedType.SafeArray)> ByVal Items() As Object)
<DispId(3)> _
Function GetItemDescriptions(<InAttribute()> ByVal bstrLocation As String, _
<InAttribute(), OutAttribute(), MarshalAs(UnmanagedType.SafeArray)> ByRef varDescriptions() As Object)
<DispId(4)> _
ReadOnly Property IsEmpty(<MarshalAs(UnmanagedType.VariantBool)> ByVal bEmpty As Boolean)
End Interface
End Module
using System;
using System.Runtime.InteropServices;
namespace MyModule
{
// If you do not have a type library for an interface
// you can redeclare it using ComImportAttribute.
// This is how the interface would look in an idl file.
//[
//object,
//uuid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26"),
//dual, helpstring("IMyStorage Interface"),
//pointer_default(unique)
//]
//interface IMyStorage : IDispatch
//{
// [id(1)]
// HRESULT GetItem([in] BSTR bstrName, [out, retval] IDispatch ** ppItem);
// [id(2)]
// HRESULT GetItems([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT)* pItems);
// [id(3)]
// HRESULT GetItemDescriptions([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT) ** ppItems);
// [id(4), propget]
// HRESULT get_IsEmpty([out, retval] BOOL * pfEmpty);
//};
// This is the managed declaration.
[ComImport]
[Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")]
public interface IMyStorage
{
[DispId(1)]
[return : MarshalAs( UnmanagedType.Interface )]
Object GetItem( [In, MarshalAs( UnmanagedType.BStr )] String bstrName );
[DispId(2)]
void GetItems( [In, MarshalAs( UnmanagedType.BStr )] String bstrLocation,
[Out, MarshalAs( UnmanagedType.SafeArray,
SafeArraySubType = VarEnum.VT_VARIANT )] out Object[] Items );
[DispId(3)]
void GetItemDescriptions( [In] String bstrLocation,
[In, Out, MarshalAs( UnmanagedType.SafeArray )] ref Object[] varDescriptions );
bool IsEmpty
{
[DispId(4)]
[return : MarshalAs( UnmanagedType.VariantBool )]
get;
}
}
}
using namespace System;
using namespace System::Runtime::InteropServices;
// If you do not have a type library for an interface
// you can redeclare it using ComImportAttribute.
// This is how the interface would look in an idl file.
//[
//object,
//uuid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26"),
//dual, helpstring("IMyStorage Interface"),
//pointer_default(unique)
//]
//interface IMyStorage : IDispatch
//{
// [id(1)]
// HRESULT GetItem([in] BSTR bstrName, [out, retval] IDispatch ** ppItem);
// [id(2)]
// HRESULT GetItems([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT)* pItems);
// [id(3)]
// HRESULT GetItemDescriptions([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT) ** ppItems);
// [id(4), propget]
// HRESULT get_IsEmpty([out, retval] BOOL * pfEmpty);
//};
// This is the managed declaration.
[ComImport]
[Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")]
interface class IMyStorage
{
[DispId(1)]
Object^ GetItem( [In,MarshalAs(UnmanagedType::BStr)]String^ bstrName );
//[return : MarshalAs(UnmanagedType::Interface)]
[DispId(2)]
void GetItems( [In,MarshalAs(UnmanagedType::BStr)]String^ bstrLocation, [Out,MarshalAs(UnmanagedType::SafeArray,
SafeArraySubType=VarEnum::VT_VARIANT)]array<Object^>^Items );
[DispId(3)]
void GetItemDescriptions( [In]String^ bstrLocation, [In,Out,MarshalAs(UnmanagedType::SafeArray)]array<Object^>^varDescriptions );
property bool IsEmpty
{
[DispId(4)]
[returnvalue:MarshalAs(UnmanagedType::VariantBool)]
bool get();
}
};
import System.*;
import System.Runtime.InteropServices.*;
// If you do not have a type library for an interface
// you can redeclare it using ComImportAttribute.
// This is how the interface would look in an idl file.
// [
// object,
// uuid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26"),
// dual, helpstring("IMyStorage Interface"),
// pointer_default(unique)
// ]
// interface IMyStorage : IDispatch
// {
// [id(1)]
// HRESULT GetItem([in] BSTR bstrName, [out, retval] IDispatch ** ppItem);
// [id(2)]
// HRESULT GetItems([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT)* pItems);
// [id(3)]
// HRESULT GetItemDescriptions([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT) ** ppItems);
// [id(4), propget]
// HRESULT get_IsEmpty([out, retval] BOOL * pfEmpty);
// };
// This is the managed declaration.
/** @attribute ComImport()
*/
/** @attribute Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")
*/
public interface IMyStorage
{
/** @attribute DispId(1)
*/
Object GetItem(
/** @attribute In()
@attribute MarshalAs(UnmanagedType.BStr)
*/String bstrName);
/** @attribute DispId(2)
*/
void GetItems(
/** @attribute In()
@attribute MarshalAs(UnmanagedType.BStr)
*/String bstrLocation,
/** @attribute Out()
@attribute MarshalAs(UnmanagedType.SafeArray,
SafeArraySubType = VarEnum.VT_VARIANT)
*/Object Items[]);
/** @attribute DispId(3)
*/
void GetItemDescriptions(
/** @attribute In()
*/String bstrLocation,
/** @attribute In()
@attribute Out()
@attribute MarshalAs(UnmanagedType.SafeArray)
*/Object varDescriptions[]);
/** @attribute DispId(4)
*/
/** @return MarshalAs(UnmanagedType.VariantBool)
*/
boolean get_IsEmpty();
} //IMyStorage
平台
Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition
.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。
版本信息
.NET Framework
受以下版本支持:2.0、1.1、1.0
.NET Compact Framework
受以下版本支持:2.0
请参见
参考
System.Runtime.InteropServices 命名空间
SafeArray
MarshalAsAttribute 类