C# dll函数 传递 结构体数组指针

lulu23260 2014-03-23 09:29:28
调用方不知道结构体数组大小,传进来指针,dll函数把结构体值通过指针传结构体数组值,并返回数组大小,自己写的实现:(txt写的,有小错误,勿怪,编译无错)
dll中函数
class1
{
public int fun(IntPtr p)
{
int count=0;
int i=0;
count=getNumberFunction();
MyUnion [] myUnion=new Myunion[count];
for(i=0;i<count;i++)
{
myUnion[i]=new MyUnion();
//给结构体各成员赋值
}
IntPtr[] pArray=new IntPtr[1];
pArray[0]=Marshal.AllocHGlobal(Marshal.sizeof(typeof(MyUnion))*10);

Marshal.copy(pArray[0],0,p,1);
Marshal.FreeHGlobal(pArray[0]);
return count;
}
}
调用DLL:
using ......
void UseDllFunction ()
{
int i=0;
int uesFullNum=0;
int size=Marshal.sizeof(typeof(class1.MyUnion));
IntPtr pt=Marshal.AllocHGlobal(Marshal.sizeof(typeof(class1.MyUnion)));
mytestSpace.class1 cl1=new class1();

uesFullNum=cl1.fun(pt);

cl1.MyUnion[] myunion=new MyUnion[uesFullNum];
for(i;i<uesFullNum;i++)
{
myunion[i]=new cl1.MyUnion[];
cl1.MyUnion[]=(cl1.MyUnion)Marshal.PtrToStruct((IntPtr)(pt+i*size),typeof(class1.MyUnion));
}
Marshal.FreeHGlobal(pt);
}
就是通过指针传递不知道元素个数的结构体数组,
测试发现,调用端各结构体数组的各成员值都是错误的,思路有错误吗??还是实现上写错了?
这种内存copy,释放本地内存后,值传不出去??
...全文
135 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lulu23260 2014-03-26
  • 打赏
  • 举报
回复
DLL中的函数少写一句, ptArray[0] = System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(myUnion, 0); 可是加上也还是不行
lulu23260 2014-03-26
  • 打赏
  • 举报
回复
我将参数指针换成了 ref' 还是不行,,,为什么呢?有其他思路没? 求救啊,大侠们呢?
lr21shiji 2014-03-26
  • 打赏
  • 举报
回复
楼主可以看看dll的代码是怎么写的,然后针对性解决

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧