您的位置:首页 > 编程语言 > C语言/C++

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

2008-02-20 13:14 477 查看
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: