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);
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);
相关文章推荐
- 从Delphi返回动态数组到C#和C++
- 在C#中如何在函数参数中返回结构数组
- c#调用c++写成的dll文件,返回char*,返回数组,用ref接收,byte[] (zz)
- C#调用C++方法,C#使用c++方法返回类或结构体
- c#调用c++结构数组
- c#调用c++写成的dll文件,返回char*,返回数组,用ref接收,byte[]
- c#调用c++写成的dll文件,返回char*,返回数组,用ref接收,byte[] (zz)
- 在C#中如何在函数参数中返回结构数组?
- 在C#中如何在函数参数中返回结构数组?
- C#中的数组和C++中数组的区别
- C#接收C++动态库返回字符串char*,在C#端如何接收并得到正确的字符串
- C# 方法返回未知长度数组
- 如何使用opencv的c++接口来读取、写结构体数组到yml文件中
- c# 两个数组比较,将重复部分去掉,返回不重复部分的实现
- C++中如何返回一个数组以及可能会遇到的问题geekband
- 顺序表----数组结构c++
- C++函数返回数组
- C#调运C++的DLL返回中文字符串乱码问题
- 关于C++中string、vector、bitset和数组的size()返回类型的总结
- C++中函数如何返回数组