首页 新闻 会员 周边

C#调用C++ dll的问题

0
悬赏园豆:20 [已解决问题] 解决于 2016-01-13 17:02

C++ dll中的函数接口如下
void WINAPI Cal(float *Sour[15],float *Pro[12],float *Dis,float *Angle[2],int DLength);

C#中要如何写这个包装方法?
C#中要传给Sour参数的是List<SData>类型数据,这个List<SData>如何转成与Sour一致的类型?
求指教。

问题补充:

顶一下,求指教。

ttssrs的主页 ttssrs | 初学一级 | 园豆:82
提问于:2013-06-09 10:43
< >
分享
最佳答案
0

sData 是什么类,变量类型是什么

收获园豆:20
WuRang | 小虾三级 |园豆:1730 | 2013-06-09 11:19

sData是自定义类型,里面都是double类型的变量,一共15个,是下面这样的:

public double Dis1 { get; set; }
public double Dis2 { get; set; }
public double Dis3 { get; set; }
public double Dis4 { get; set; }
public double Dis5 { get; set; }
……

ttssrs | 园豆:82 (初学一级) | 2013-06-09 12:37

@ttssrs: 感觉list应该一个一个传,应该是遍历list,然后每一个遍历过程执行一个WINAPI吧,这样才能对应float *Sour[15]

WuRang | 园豆:1730 (小虾三级) | 2013-06-09 12:43

@WuRang: 请问应该怎么一个一个传呢?DLL中参数只有float *Sour[15]这一个参数呀。

ttssrs | 园豆:82 (初学一级) | 2013-06-09 12:48

@ttssrs: 是这样 

foreach(sdata item in ListSdata)
{
     winapi cal(item,pro,dis.....)
}

需要注意sdata传到float *Sour[15]可能需要把double转成float

WuRang | 园豆:1730 (小虾三级) | 2013-06-09 12:52

@WuRang: 您的意思是对sData中的每一个变量都调用一次cal?但是cal函数可能需要知道所有数据才能进行计算,而且float *Pro[12]是对输入的sData进行计算后返回的12列数据,后面几个变量也是cal函数返回的数据值,我应该怎么获取?

ttssrs | 园豆:82 (初学一级) | 2013-06-09 13:00

@ttssrs: 你也知道Pro是对输入的sData进行计算后返回的12列数据,那么list中存了很多sdata是不是要对应很多float *Pro[12],我的意思是说你的存储结构你清楚了么?如果单一是一个sdata,那它里面是15个double。现在用list<sdata>存了,那么这个list是个N*15的数据,N是list的项目数量。如果是这样,那么float *Pro[12]也需要放在同样大小的list中,每一个sdata对应一个pro

WuRang | 园豆:1730 (小虾三级) | 2013-06-09 13:11

@WuRang: 这里明白了,那么float *Dis,float *Angle[2],int DLength这几个参数呢,它们是对所有sData进行计算会返回的结果,按您的意思应该是sData里的每一列都要回返一次这三个值吧?

ttssrs | 园豆:82 (初学一级) | 2013-06-09 13:16

@ttssrs: 我不知道你这个cal具体参数是做什么的,int DLength这个肯定不是返回值了,如果是返回值,传空的进去就行了假入float *Dis,float *Angle[2]都是返回值那么这么用

float []Pro= new float[12];

float dis;

float []angle = new float[2];

foreach(sdata item in ListSdata)
{
     winapi cal(item,pro,dis.....)
}

既然是返回,可能需要使用ref ,这个我没试过,
winapi cal(item,pro,dis.....)这样的话pro和dis的修改值应该不会返回,可以试试
winapi cal(item,ref pro,ref dis.....)
WuRang | 园豆:1730 (小虾三级) | 2013-06-09 13:22

@ttssrs:还有一个“按您的意思应该是sData里的每一列都要回返一次这三个值吧?” 应该是list<sdata>里的每一列都要回返一次这三个值吧

WuRang | 园豆:1730 (小虾三级) | 2013-06-09 13:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册