这段时间想把原来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时也是不能正常的返回对应的数据。
LoadAppleInfo(char * filename, EatApple *eatApple)
你需要在C#中为声明为 GoodApple的 IntPtr 分配内存.
谢谢关注,在经历了多次试验后,我在C#中把对应的struct初始化时为每个字段都new了一下,能解决了。
但是当我调用C写的保存这个struct实例的数据到文本文件时有出现了问题,说是传给系统的可操作的数据区太少,郁闷,还在求索中。