IDL Complex Types
abstract valuetype

The CORBA abstact valuetype (TBD) ...... 

It maps to VB's class type.

// CORBA IDL
abstract valuetype aValueBase
{
   readonly attribute long number;
   void print_base();
};
 
// VB 

Imports System

Namespace demo.obv.abstract_valuetype
   '
   ' Value Type definition : aValueBase
   ' 
   ' @author TomORB VB Native Compiler 1.0rc1
   '
   Public Interface aValueBase
      Inherits Org.Omg.CORBA.Portable.ValueBase
      ' 
      ' Read accessor for number1 attribute
      ' @return the attribute value
      ' 
      ReadOnly Property number1 As Integer
      '
      ' Operation print_base1
      '
      Sub Print_Base1()

   End Interface

End Namespace

Namespace demo.obv.abstract_valuetype
   ' 
   ' Helper class for : aValueBase
   '  
   ' @author TomORB VB Native Compiler 1.0rc1
   ' 
   Public Class aValueBaseHelper
      '
      ' Insert aValueBase into an any
      ' param name="a" an any
      ' param name="t" aValueBase value
      '
      Public Shared Sub Insert(a As Org.Omg.CORBA.Any, 
                               t As demo.obv.abstract_valuetype.aValueBase)
                               
         a.Insert_Value(t, Type())
      End Sub

      '
      ' Extract aValueBase from an any
      ' @param a an any
      ' @return the extracted aValueBase value
      '
      Public Shared Function Extract(a As Org.Omg.CORBA.Any) 
                    As demo.obv.abstract_valuetype.aValueBase
                    
         If Not(a.Type().Equal(Type())) Then
            Throw New Org.Omg.CORBA.MARSHAL()
         End If
         Try
		    Return CType(a.Extract_Value(),demo.obv.abstract_valuetype.aValueBase)
         Catch e As System.InvalidCastException
            Throw New Org.Omg.CORBA.MARSHAL(e.Message)
         End Try
      End Function

      '
      ' Internal TypeCode value
      '
      Private Shared _tc As Org.Omg.CORBA.TypeCode = Nothing
      Private Shared _working As Boolean = false

      '
      ' Return the aValueBase TypeCode
      ' @return a TypeCode
      '
      Public Shared Function Type() As Org.Omg.CORBA.TypeCode
         If _tc Is Nothing Then
            SyncLock (GetType(Org.Omg.CORBA.TypeCode))
               If Not(_tc Is Nothing) Then
                  Return _tc
               End If
               If _working Then
                  Return Org.Omg.CORBA.ORB.Init().Create_Recursive_TC(Id())
               End If
               _working = True
               Dim orb As Org.Omg.CORBA.ORB = Org.Omg.CORBA.ORB.Init()
               Dim _members() As Org.Omg.CORBA.ValueMember = New Org.Omg.CORBA.ValueMember(-1){}
			   Dim _concrete_tc As Org.Omg.CORBA.TypeCode = orb.Get_Primitive_TC(
			                                                  Org.Omg.CORBA.TCKind.tk_null)

               _tc = orb.Create_Value_TC(Id(),"aValueBase",Org.Omg.CORBA.VM_ABSTRACT.value,
                                         _concrete_tc,_members)
               _working = False
            End SyncLock
         End If
         Return _tc
      End Function

      '
      ' Return the aValueBase IDL ID
      ' @return an ID
      '
      Public Shared Function Id() As String
         Return _id
      End Function

      Private Shared _id As String = "IDL:demo/obv/abstract_valuetype/aValueBase:1.0"

      '
      ' Read aValueBase from a marshalled stream
      ' @param istream the input stream
      ' @return the readed aValueBase value
      '
      Public Shared Function Read(istream As Org.Omg.CORBA.Portable.InputStream) 
                    As demo.obv.abstract_valuetype.aValueBase
         Return CType(CType(istream, Org.Omg.CORBA_2_3.Portable.InputStream).Read_Value(_id),
                      demo.obv.abstract_valuetype.aValueBase)
	  End Function

      '
      ' Write aValueBase into a marshalled stream
      ' @param ostream the output stream
      ' @param value aValueBase value
      '
      Public Shared Sub Write(ostream As Org.Omg.CORBA.Portable.OutputStream, 
                              value As demo.obv.abstract_valuetype.aValueBase)
                              
         CType(ostream, Org.Omg.CORBA_2_3.Portable.OutputStream).Write_Value(value, _id)
      End Sub

   End Class

End Namespace