首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c#调用C++的dll时,接口函数里的数组怎么传递

2012-10-21 
c#调用C++的dll时,接口函数里的数组如何传递C/C++ codeextern C __declspec(dllexport) BOOL Initdata(d

c#调用C++的dll时,接口函数里的数组如何传递

C/C++ code
extern "C" __declspec(dllexport) BOOL Initdata(double* d_Conc, double* d_RLU,double d_Cal1RLU, double d_Cal2RLU,double d_Cal1Conc, double d_Cal2Conc, int nLen,int FitMethod);


数组地址如何传递呢??

C# code
            double[] arrConc = new double[]            {                0,4,16,                32,64,128            };            double[] arrRlu = new double[]            {                8487,36329,159167,                315859,654285,1190543            };            double Cal1Rlu = 36330;            double Cal1Conc = 4;            double Cal2Rlu = 654285;            double Cal2Conc = 64;                 int len = 6;            int fitWay = 1;            //初始化无法获取到正确的            bool rt = Initdata(ref arrConc[0], ref arrRlu[0], Cal1Rlu, Cal1Conc, Cal2Rlu, Cal2Conc, len, fitWay);   [DllImport("Cal_datadll.dll")]        public static extern bool Initdata(ref double dConc, ref double dRlu,             double Cal1Rlu, double Cal1Conc, double Cal2Rlu, double Cal2Conc, int len, int fitWay);/************************/[DllImport("Cal_datadll.dll")]        public static extern bool Initdata(ref double[] dConc, ref double[] dRlu,             double Cal1Rlu, double Cal1Conc, double Cal2Rlu, double Cal2Conc, int len, int fitWay);     bool rt = Initdata(ref arrConc, ref arrRlu, Cal1Rlu, Cal1Conc, Cal2Rlu, Cal2Conc, len, fitWay);//也不行.


[解决办法]
C++数据类型与C#对应关系
[解决办法]
C#调用C++编写的DLL函数, 以及各种类型的参数传递
[解决办法]
double* 用 ref double
数组的话 doubel[]
[解决办法]
bool rt = Initdata(ref arrConc[0], ref arrRlu[0], Cal1Rlu, Cal1Conc, Cal2Rlu, Cal2Conc, len, fitWay);
这个有问题吧,如果double*表示数组,那就直接用double[],不要用ref,还有C++中的指针在C#中可以用Intptr表示,不管指针表示的是数组还是字符串。
[解决办法]
http://wenku.baidu.com/view/5126f84b2b160b4e767fcf85.html?st=1在给各连接看看
[解决办法]
[MarshalAs(UnmanagedType.LPArray,SizeParamIndex=1)] double [] Z,,, [MarshalAs(UnmanagedType.LPArray,SizeParamIndex=1)】在C#中数组是直接使用的,而在C++中返回的是数组的指针,这句用来转化这两种不同的类型.

热点排行