C# Code:
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace ReturnArrayDemo
{
[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;
}
}
}
And then using the PowerBuilder Classic code to call it:
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 ( "ReturnArrayDemo.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 ))
//Destroy loo_class
FOR li_x = 1 TO 10000
loo_classarray = retarray.GetClassArray()
st_1.Text = loo_classarray[1].myString + " Step: " + String ( li_x )
li_count = UpperBound ( loo_classarray )
FOR li_index = li_count TO 1 STEP -1
//Destroy loo_classarray[li_index]
NEXT
//GarbageCollect()
NEXT
retarray.DisconnectObject()
Destroy retarray
注册命令:
cd : C:\Windows\Microsoft.NET\Framework\v4.0.30319
regasm.exe ReturnArrayDemo.dll /codebase