c++返回结构数组给c#

C++:
 StructFormItem* EnumFormItem(int* nCount)
 {
     if(g_FormEdit.m_hWnd)
     {
         return g_FormEdit.EnumFormitem(nCount);
     }
     return NULL;
 }

 void FreeMemory(StructFormItem* pFormItems)
 {
     delete[] pFormItems;
 }

StructFormItem* XFormEditor::EnumFormitem(int* pFormItems)
 {
     XFormItemList * pList = m_pEditor->m_XItemContainer.GetItemList();
     XFormItemList * pHead = pList;
     int nCount = 0;
     while (pHead != NULL)
     {       
         pHead = pHead->lpNext;
         nCount++;
     }   
     StructFormItem* pStructFormItem = new StructFormItem[nCount];
     int nIndex = 0;
     while(pList != NULL)
     {
         XFormItem* pItem = NULL;
         pItem = pList->lpItem;       
         pStructFormItem[nIndex].nID = pItem->m_nIdent;
         pStructFormItem[nIndex].dwType = pItem->m_dwType;
         pStructFormItem[nIndex].left = pItem->m_rcRect.left;
         pStructFormItem[nIndex].width = pItem->m_rcRect.right-pItem->m_rcRect.left;
         pStructFormItem[nIndex].top = pItem->m_rcRect.top;
         pStructFormItem[nIndex].height = pItem->m_rcRect.bottom-pItem->m_rcRect.top ;                       
         pList = pList->lpNext;
         nIndex++;       
     }
     *pFormItems = nCount;
     return pStructFormItem;
 }
 c#使用
[DllImport(@"FormEditor.dll", EntryPoint = "EnumFormItem")]
        public static extern IntPtr EnumFormItem(out int count);


        [DllImport(@"FormEditor.dll", EntryPoint = "FreeMemory")]
        public static extern void FreeMemory(IntPtr formItemsPtr);
 int number;
            IntPtr ptrFormItem = EnumFormItem(out number);
            IntPtr prtHead = ptrFormItem;
            for (int i = 0; i < number; ++i)
            {
                FormItemInfo iteminfo = (FormItemInfo)Marshal.PtrToStructure(ptrFormItem, typeof(FormItemInfo));
                ptrFormItem = (IntPtr)(ptrFormItem.ToInt32() + Marshal.SizeOf(typeof(FormItemInfo)));
            }
            FreeMemory(prtHead);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值