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

...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
杨友山 2011-08-03
  • 打赏
  • 举报
回复
这确实很纠结,之前我也试图将一段c++读文件的代码转为c#,但是后来放弃了,c++老是用数组做地址,很麻烦。

但愿你能找到解决的办法。
q345852047 2011-08-02
  • 打赏
  • 举报
回复
来学习一下~~
chmdcr 2011-08-02
  • 打赏
  • 举报
回复
三发了? 我的分 啊
636f6c696e 2011-08-02
  • 打赏
  • 举报
回复
楼主你三发?...
网络看来卡的不行了...
该用户已注销 2011-08-02
  • 打赏
  • 举报
回复
ref 关键字使参数按引用传递。
当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。

110,536

社区成员

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

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

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