call to .NET COM object via OLEObject

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值