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 belowAnd once the dll is reguster for COM and called in VB the below code in VBCode: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; } } }
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 lockedCode: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
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 VBwhat is issue if i declare a getter and setter for the classaddress?Code:[ClassInterface(ClassInterfaceType.AutoDual)] [ComVisible(true)] public class ClassResponseMsg { public ClassPersonName ClassNameField = null; [System.Xml.Serialization.XmlElementAttribute("classAdds")] public ClassAddress[] classAdds =null; }
regards
Pandi G S


Reply With Quote