PB的扩展DLL开发(超级篇)(六)

PB的扩展DLL开发(超级篇)(六)

(PB史上第一次开放的开发技术)

数组使用及返回引用数组

数组的定义是这样:

Typedef  PVOID OB_ARRAY_ID, FAR* POB_ARRAY_ID;

可见它是一个指针。本节举一个数组复制的函数例子,PB中声明如下:

Function int CopyArray(string fromArray[],ref string toArray[]) system library “my.dll” alias for “CopyArray”

DLLEXPORT DWORD WINAPI CopyArray(POB_THIS obThis, int nArgs)

{

         BOOL isnull = FALSE;

         //先声明2个数组指针变量

         OB_ARRAY_ID fromArray = NULL;

         OB_ARRAY_ID toArray = NULL;

    //取第一个参数

         fromArray = (OB_ARRAY_ID)ot_get_valptr_arg(obThis, &isnull);

    //取第二个参数,引用类型

    {

        POT_LVALUE_INFO info = NULL;

        POB_DATA obRefArg = ot_get_next_lvalue_arg(obThis, &info);

        if (ot_is_a_reference_argument(obThis, obRefArg))

        {

            POT_REF_PAK v = (POT_REF_PAK)ob_get_data_ptr(obRefArg);

            POB_DATA obToArray = ot_access_ref_data(obThis, v);

            if (ot_is_array(obThis, obToArray))

            {

                //判断此数据是数组

                toArray = (OB_ARRAY_ID)ob_get_data_ptr(obToArray);

            }

        }

    }

    int nCopyIndex = 0;

    //判断,其中返回值的引用数组必须是一个 unbounded 数组

    if (fromArray && toArray && ot_is_array_unbounded(obThis, toArray))

    {

        //获取源数组中的项数

        int nItemCount = ot_array_num_items(obThis, fromArray);

        //循环取出所有源项,并且复制

        for (int i = 0; i < nItemCount; i++)

        {

            //源数据项

            POB_DATA obFromItem = ot_array_index(obThis,fromArray, i);

            //目标数据项

            POB_DATA obToItem = ot_array_index(obThis, toArray, nCopyIndex);

           

            //进行数据项复制

            //注意第4个参数,这个参数表示是否引用,对于一般数据类型,直接是复制,但对于对象实例,不可能再创建一个对象实例,而应该是引用,即源数组和目标数组中的对象指针,指向同一个对象实例。

            rtDataCopy(obThis, obToItem, obFromItem, TRUE);

            //目标索引加1

            nCopyIndex++;

        }

    }

    //设置函数返回值为复制的个数

    OB_DATA obReturn = { 0 };

    ob_set_data_int(&obReturn, nCopyIndex, INT_TYPE, 1);

    ot_set_return(obThis, &obReturn);

}

以上是一个关于数组使用的函数,这个函数示例中都加了详细的中文注解,应该比较好理解。

数组的使用比较复杂,以上只是对一般使用做个介绍,能满足大多数普通应用。

如果你对system library相关开发方式感兴趣,可到QQ群624409252共享里大自在的专用目录下下载DEMO。

你可能感兴趣的:(pbidea,PB应用技术,PB,其他)