Reading C# class Array object COM Interop
Hi All,
I created a DLL in C-sharp and exposed to vb6. the dll will return a object
The declarartion of object in csharp is given below
Code:
namespace ClassLibNew
{
[ComVisible(true)]
public interface IClassNewLib
{
ClassResponseMsg TestcallMethod();
}
[ClassInterface(ClassInterfaceType.None),
ComVisible(true)]
public class ClassNewLib : IClassNewLib
{
public ClassNewLib()
{
//
// TODO: Add constructor logic here
//
}
[ComVisible(true)]
public ClassResponseMsg TestcallMethod()
{
ClassResponseMsg obj=new ClassResponseMsg();
ClassPersonName per =new ClassPersonName();
per.ClassfirstName ="welcome";
obj.ClassNameField =per;
ClassAddress adp=new ClassAddress();
adp.ClassAddress1="MKGsjh";
adp.ClassAddress2="eeeeee";
adp.ClassAddrType= ClassAddr.ClassHomePhone ;
ClassAddress adp1=new ClassAddress ();
adp1.ClassAddress1 ="QWq";
adp1.ClassAddress1 ="AAAA";
adp1.ClassAddrType=ClassAddr.ClassOfficePhone ;
obj.classAddS = new ClassAddress[2];
obj.classAddS[0]=adp;
obj.classAddS[1]=adp1;
return obj;
}
}
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class ClassAddress
{
private string _ClassAddress1=string.Empty;
private string _ClassAddress2=string.Empty;
public ClassAddr ClassAddrType;
public string ClassAddress1
{
set { _ClassAddress1 =value;}
get {return _ClassAddress1;}
}
public string ClassAddress2
{
set { _ClassAddress2 =value;}
get {return _ClassAddress2;}
}
}
[Serializable]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://NBK.com/Common")]
[ComVisible(true)]
public enum ClassAddr : byte
{
ClassHomePhone,
ClassOfficePhone,
ClassWorkPhone,
}
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class ClassPersonName
{
public string ClassfirstName=string.Empty;
}
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class ClassResponseMsg
{
public ClassPersonName ClassNameField = null;
private ClassAddress[] classAdds =null;
[System.Xml.Serialization.XmlElementAttribute("classAdds",typeof(ClassAddress))]
public ClassAddress[] classAddS
{
get
{
return this.classAdds;
}
set
{
this.classAdds = value;
}
}
}
And once the dll is reguster for COM and called in VB the below code in VB
Code:
Dim ob As Object
Set ob = CreateObject("ClassLibNew.ClassNewLib")
Dim yah As Object
Set yah = CreateObject("ClassLibNew.ClassResponseMsg")
Set yah = ob.TestcallMethod()
Dim vari As Variant
Set ok = CreateObject("ClassLibNew.ClassAddress")
For Each vari In yah.ClassAddS
Debug.Print vari.ClassAddress1
Debug.Print vari.ClassAddrType
Next
I cant able to read the ClassAddS array of class Address object in the response the error i am getting is variable uses an automation type not supported in vb and the array is fixed or temporiary locked
And above same csharp code if i change the address class declaration as below, then i am able to read the responses from csharp in VB
Code:
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class ClassResponseMsg
{
public ClassPersonName ClassNameField = null;
[System.Xml.Serialization.XmlElementAttribute("classAdds")]
public ClassAddress[] classAdds =null;
}
what is issue if i declare a getter and setter for the classaddress?
regards
Pandi G S