C#与C++的类型问题

chmdcr 2011-08-02 03:30:14
刚开始写C# 调用C++的DLL

C++ 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#中该怎么声明函数呢?

...全文
55 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdmh 2011-08-02
  • 打赏
  • 举报
回复
ref 被当做引用传递,符合c++的指针类型参数
py1025677845 2011-08-02
  • 打赏
  • 举报
回复
可以定义一个等长的数组代替C++中的二维数组
636f6c696e 2011-08-02
  • 打赏
  • 举报
回复
ref怎么可能改变数组维数.
他只是个关键字,使参数按引用传递,好好看看msdn吧.
http://msdn.microsoft.com/zh-cn/library/14akc2c7(v=VS.90).aspx
该用户已注销 2011-08-02
  • 打赏
  • 举报
回复
ref 关键字使参数按引用传递。
当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧