- achuta twameva
- PowerBuilder
- Saturday, 25 January 2020 09:31 AM UTC
Hi all,
I am facing a strange issue while fetching an array of a specific object type from .NET C# to PB 11.2 (classic) via COM.
My C# code is as follows:
namespace RestHandler
{
[ComVisible(true)]
[Guid("3CF8AB49-5E7D-4719-B277-5047C6A42FAE")]
public interface IReturnArray
{
String getString();
String[] getStringArray();
myClass getClass();
myClass[] getClassArray();
}
[ComVisible(true)]
[Guid("EDA88A40-73BC-4e61-B134-DD07D42E91E0")]
public class myClass
{
[ComVisible(true)]
[MarshalAs(UnmanagedType.BStr)]
public string myString;
[ComVisible(true)]
public int myInt;
}
[ComVisible(true)]
[Guid("8035E886-82F1-47c7-AE7D-087DD0A555CE")]
[ClassInterface(ClassInterfaceType.None)]
public class ReturnArray : IReturnArray
{
public ReturnArray()
{
}
public String getString()
{
return "Hello World";
}
public String[] getStringArray()
{
String[] myArray = new String[2] { "Hello", "World" };
return myArray;
}
public myClass getClass()
{
myClass temp =
new myClass
{
myString = "Hello",
myInt = 1
};
return temp;
}
public myClass[] getClassArray()
{
myClass[] myArray =
new myClass[]{
new myClass(){
myString = "Hello",
myInt = 1
},
new myClass(){
myString = "World",
myInt = 2
},
new myClass(){
myString = "This is Bruce",
myInt = 3
}
};
return myArray;
}
}
}
My PB code is as follows:
oleobject retarray
int li_rc
int li_index, li_count
int li_x
String ls_string
String ls_stringarray[]
oleobject loo_class
oleobject loo_classarray[]
retarray = CREATE OleObject
li_rc = retarray.ConnectToNewObject ( "RestHandler.ReturnArray" )
ls_string = retarray.getString()
MessageBox ( "getString", ls_string )
ls_stringarray = retarray.getStringArray()
MessageBox ( "getStringArray", ls_stringarray[1] )
loo_class = retarray.GetClass()
MessageBox ( "GetClass", String ( loo_class.myString )) /*single object works*/
Destroy loo_class
loo_classarray = retarray.GetClassArray()
st_1.Text = loo_classarray[1].myString /*null error, array of object does not work?*/
retarray.DisconnectObject()
Destroy retarray
This is all Bruce Armstrong sample codes on some other forum. In there, it's mentioned this works. Strangely, when I return a single object from C#, I can access it via a corresponding OLEObject in PB. Now, when I return an array of an object (Employee[]), I am trying to convert that into an array of OLEObject in PB and the number of objects in this OLEObject array is indeed correct in PB. However, all the OLEObject within this array is null; therefore I am getting a null reference exception in PB at the following line:
st_1.Text = loo_classarray[1].myString /*null error, array of object does not work?*/
Does anyone here have any idea why? I have already spent hours trying to find the reason.
Thanking you in advance,
-A
Find Questions by Tag
Helpful?
If a reply or comment is helpful for you, please don’t hesitate to click the Helpful button. This action is further confirmation of their invaluable contribution to the Appeon Community.