首页 新闻 会员 周边

请教有关C# Pinvoke问题。

0
[待解决问题]

这段时间想把原来C语言下的代码移植到C#语言下,但是考虑再三,还是采取平台调用的方式,但是遇到了一下问题:

file.h

struct EatApple

{

  char AppleName[12][65];

  int Count;

  int * GoodApple;

}

file.c

int LoadAppleInfo(char * filename, EatApple *eatApple)

{

  int ret = 0;

  .......

  eatApple->Count = 1024;

  for(i) sscanf( AppleName[i][65]);

  if((eatApple->GoodApple = (int *)malloc(sizeof(int)*eatApple->Count)) != NULL)

  {

    for(i) eatApple->GoodApple[i] = i;

  }

  ......

}

 

但是我在C#对应的Struct里面声明了public InPtr  GoodApple;但是在调用LoadAppleInfo时C代码中动态开辟的指针却没法正常返回,逼得我只好又写了一个接口函数返回这个指针。不知是我对平台调用理解的不好,还是C动态开辟的内存区无法通过结构体传回来,还请高手赐教。

针对file.h中char AppleName[12][65];我在file.cs中定义成了[ ... sizeconst = 12]char IntPtr [] AppleName;但是在调用LoadAppleInfo时也是不能正常的返回对应的数据。

ljldtd的主页 ljldtd | 菜鸟二级 | 园豆:205
提问于:2011-10-12 01:26
< >
分享
所有回答(1)
0

LoadAppleInfo(char * filename, EatApple *eatApple)

你需要在C#中为声明为 GoodApple的 IntPtr 分配内存.

Launcher | 园豆:45045 (高人七级) | 2011-10-12 09:20

谢谢关注,在经历了多次试验后,我在C#中把对应的struct初始化时为每个字段都new了一下,能解决了。

但是当我调用C写的保存这个struct实例的数据到文本文件时有出现了问题,说是传给系统的可操作的数据区太少,郁闷,还在求索中。

支持(0) 反对(0) ljldtd | 园豆:205 (菜鸟二级) | 2011-10-14 23:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册