刚开始写C# 调用C++的DLLC++ DLL 对外接口声明如下extern "C" __declspec(dllexport) int GetSnapshotValues(int PointNum,LPCSTR strPtName[],float* fPtValue,short* iState)
在C#中使用了两种方式调用//第一种 声明
public static extern int GetSnapshotValues(int nNum, string[] StrParam,float[] ParamNum,short[] DbType);//第二种 声明
public static extern int GetSnapshotValues(int nNum, string[] StrParam,ref float[] ParamNum,ref short[] DbType);//调用
string[] tt = { "1q", "2s", "3r", "4t", "5h" };
float[] ffa = new float[10];
short[] ssa = new short[10];
//第一种调用
int Res = GetSnapshotValues(5, tt, ffa, ssa); //可以正常执行 参数ffa, ssa取得返回值 //第二种调用
//int Res = GetSnapshotValues(5, tt,ref ffa, ref ssa);//参数ffa, ssa可以取得返回值 但函数执行完报错
//"引发类型为“System.ExecutionEngineException”的异常。"
return string.Format("success");我现在知道传递数组时传递的是引用 我想弄明白的是如果使用
第二种方式 参数ref float[] ParamNum 与与第一种float[] ParamNum 有什么不同呢?
是否可以将ref float[] ParamNum 理解为二维数组 而 float[] ParamNum 是一维的??因此引申下来 如果我在C++中使用二维数组 那么在C#中该怎么声明函数呢?
在C#中使用了两种方式调用//第一种 声明
public static extern int GetSnapshotValues(int nNum, string[] StrParam,float[] ParamNum,short[] DbType);//第二种 声明
public static extern int GetSnapshotValues(int nNum, string[] StrParam,ref float[] ParamNum,ref short[] DbType);//调用
string[] tt = { "1q", "2s", "3r", "4t", "5h" };
float[] ffa = new float[10];
short[] ssa = new short[10];
//第一种调用
int Res = GetSnapshotValues(5, tt, ffa, ssa); //可以正常执行 参数ffa, ssa取得返回值 //第二种调用
//int Res = GetSnapshotValues(5, tt,ref ffa, ref ssa);//参数ffa, ssa可以取得返回值 但函数执行完报错
//"引发类型为“System.ExecutionEngineException”的异常。"
return string.Format("success");我现在知道传递数组时传递的是引用 我想弄明白的是如果使用
第二种方式 参数ref float[] ParamNum 与与第一种float[] ParamNum 有什么不同呢?
是否可以将ref float[] ParamNum 理解为二维数组 而 float[] ParamNum 是一维的??因此引申下来 如果我在C++中使用二维数组 那么在C#中该怎么声明函数呢?
解决方案 »
- 比如说有一个按钮,一个textbox,先在窗体任意一个地方鼠标左键,然后移入按钮,如果这个左键没松的话,就赋值给textbox。如果松了,不做任何效果。
- foreach
- 网页上的时间显示
- 网站网页有状况,各位大神,菜鸟求助!!!
- 需要登录的网站, 应该如何用WebClient下载网页数据啊? 谢谢!
- session和application这2个状态可以用来跨页面传值...那么viewstate状态怎么不能用来跨页面传值了?
- asp.net(C#)读出数据库显示空格问题!!!!
- doublel类型的数据的转换
- 如何遍历XML中的某一个节点?
- 如何实现在注册表里读取和写入dword和binary类型的键值;不是文字型的那种。
- 将 中文字 转换成 拼音 方法已经实现了,但是我看不懂 求解释
- while用法?
当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
他只是个关键字,使参数按引用传递,好好看看msdn吧.
http://msdn.microsoft.com/zh-cn/library/14akc2c7(v=VS.90).aspx