Hello w_logan, >> So does this works for enum also? Yes. It works also for enum. The following is an example of how to define an automation-compatible enum in IDL : typedef [uuid(B5051CD9-A577-451b-BDD8-17AC68ED27BB)] enum { enum_value_0 = 0, enum_value_1 = 1, enum_value_2 = 2, enum_value_3 = 3 } EnumValue; Yes, the "typedef" keyword and the "uuid" attribute is necessary for proper definition of the enum type so that it is automation-compatible. Thereafter, you may include EnumValue as a type that can be used in your automation-compatible struct, e.g. : typedef [ uuid(1F2AFC9C-2ACB-4fc3-A415-8E0736B3C4BB), version(1.0), helpstring("My_Struct_VB_2") ] struct My_Struct_VB_2 // Example Struct { [helpstring("index.")] int index1; [helpstring("The Image_Struct struct.")] Image_Struct Image_List; [helpstring("EnumValue value.")] EnumValue ev1; } My_Struct_VB_2; >> can other languages using my DLL be able to use this struct. Because I was hoping my COM DLL will works with as my languages as possible and not just VB only. This very much depends on the language's IDE. VB and the Visual C# IDE do support most if not all of the automation-compatible IDL constructs. I haven't used Delphi or the other language IDEs yet so I wouldn't be able to comment on those. Send me an email and I can send you my sample program. Best Regards, Bio.