This topic has not yet been rated - Rate this topic

VarEnum Enumeration

Indicates how to marshal the array elements when an array is marshaled from managed to unmanaged code as a UnmanagedType.SafeArray.

Namespace:  System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum VarEnum
Member name Description
VT_EMPTY Indicates that a value was not specified.
VT_NULL Indicates a null value, similar to a null value in SQL.
VT_I2 Indicates a short integer.
VT_I4 Indicates a long integer.
VT_R4 Indicates a float value.
VT_R8 Indicates a double value.
VT_CY Indicates a currency value.
VT_DATE Indicates a DATE value.
VT_BSTR Indicates a BSTR string.
VT_DISPATCH Indicates an IDispatch pointer.
VT_ERROR Indicates an SCODE.
VT_BOOL Indicates a Boolean value.
VT_VARIANT Indicates a VARIANT far pointer.
VT_UNKNOWN Indicates an IUnknown pointer.
VT_DECIMAL Indicates a decimal value.
VT_I1 Indicates a char value.
VT_UI1 Indicates a byte.
VT_UI2 Indicates an unsigned short.
VT_UI4 Indicates an unsigned long.
VT_I8 Indicates a 64-bit integer.
VT_UI8 Indicates an 64-bit unsigned integer.
VT_INT Indicates an integer value.
VT_UINT Indicates an unsigned integer value.
VT_VOID Indicates a C style void.
VT_HRESULT Indicates an HRESULT.
VT_PTR Indicates a pointer type.
VT_SAFEARRAY Indicates a SAFEARRAY. Not valid in a VARIANT.
VT_CARRAY Indicates a C style array.
VT_USERDEFINED Indicates a user defined type.
VT_LPSTR Indicates a null-terminated string.
VT_LPWSTR Indicates a wide string terminated by null.
VT_RECORD Indicates a user defined type.
VT_FILETIME Indicates a FILETIME value.
VT_BLOB Indicates length prefixed bytes.
VT_STREAM Indicates that the name of a stream follows.
VT_STORAGE Indicates that the name of a storage follows.
VT_STREAMED_OBJECT Indicates that a stream contains an object.
VT_STORED_OBJECT Indicates that a storage contains an object.
VT_BLOB_OBJECT Indicates that a blob contains an object.
VT_CF Indicates the clipboard format.
VT_CLSID Indicates a class ID.
VT_VECTOR Indicates a simple, counted array.
VT_ARRAY Indicates a SAFEARRAY pointer.
VT_BYREF Indicates that a value is a reference.

Used with System.Runtime.InteropServices.MarshalAsAttribute to explicitly control the element type of the SafeArray.


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;
		}
	}
}


.NET Framework

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ