源声明:int __stdcall fun(unsigned char *srcdata, int *number, unsigned char *tagdata[4]) ;
在C#中应该如何调用传参啊 ,
求教求教~~我目前的代码: int number = 4;
byte[,] result = new byte[4, 100];
IntPtr[] ptArray = new IntPtr[4];
ptArray[0] = Marshal.AllocHGlobal(100);
ptArray[1] = Marshal.AllocHGlobal(100);
ptArray[2] = Marshal.AllocHGlobal(100);
ptArray[3] = Marshal.AllocHGlobal(100);
fucn(buf, ref number, ptArray); // 调用
for (int i = 0; i < number; i++)
{
for (int j = 0; j < 100; j++)
{
byte b = 0;
b = (byte)Marshal.PtrToStructure((IntPtr)((UInt32)ptArray[i] + j), b.GetType());
result[i, j] = b;
}
}
Console.WriteLine();
Marshal.FreeHGlobal(ptArray[0]);
Marshal.FreeHGlobal(ptArray[1]);
Marshal.FreeHGlobal(ptArray[2]);
Marshal.FreeHGlobal(ptArray[3]);
但是数据不对啊 , 我猜想我的代码写错了, 网上苦寻很久 仍未找到方法 , 求教各位啦 ..
在C#中应该如何调用传参啊 ,
求教求教~~我目前的代码: int number = 4;
byte[,] result = new byte[4, 100];
IntPtr[] ptArray = new IntPtr[4];
ptArray[0] = Marshal.AllocHGlobal(100);
ptArray[1] = Marshal.AllocHGlobal(100);
ptArray[2] = Marshal.AllocHGlobal(100);
ptArray[3] = Marshal.AllocHGlobal(100);
fucn(buf, ref number, ptArray); // 调用
for (int i = 0; i < number; i++)
{
for (int j = 0; j < 100; j++)
{
byte b = 0;
b = (byte)Marshal.PtrToStructure((IntPtr)((UInt32)ptArray[i] + j), b.GetType());
result[i, j] = b;
}
}
Console.WriteLine();
Marshal.FreeHGlobal(ptArray[0]);
Marshal.FreeHGlobal(ptArray[1]);
Marshal.FreeHGlobal(ptArray[2]);
Marshal.FreeHGlobal(ptArray[3]);
但是数据不对啊 , 我猜想我的代码写错了, 网上苦寻很久 仍未找到方法 , 求教各位啦 ..
解决方案 »
- 图文混排的内容,需要存入数据库再取出来,最后写word,怎么做
- C# 窗体问题!
- DataTable的select方法问题?
- 向高手请教:如何使数据访问层做到sql server 与oracle 通用??????????(急)
- 关于MessageBox.Show显示的问题
- 如何实现这样的winform界面
- 思归请进~~~请教如何用.net技术推送技术
- 请问C#中,已知两点 ,通过两点画线。 如何判断线或点是否是界面上。
- 一个大专生有两年工作经验,到北京去好在工作吗?请各位北京的朋友谈一谈
- 请教:如何读写注册表的内容?
- 求助C# oracle数据库同步问题
- 来C#版 交流个 vb.net DoEvents 很奇怪的问题
int *number 这个要用到unsafe的int *
unsigned char *tagdata[4]用stringbuilder[]看看。
看楼下怎么说。学习学习
这里要求传的数据都是byte的数据啊 , stringbuilder[] 能再转成byte的吗 ?
我估计 srcdata是传入的字节数组, 处理后会从tagdata返回一个二维数组样子(unsigned char *tagdata[4] 猜想这个应该是二维数组)
如果用StringBuilder, 需要构造一个对应的长度啊 , 如何做到啊 ? 我用Append(new char[100])让他有100个长度 , 但是还是不行呢 ,
目前没遇到错误
里面包含了很多的了
编译器神马的很强大
在c#中可以这样调用.
先定义变量。
byte a;
int b;
byte[] c=new byte[4];
int d;
然后给他们赋值。…………最后,可以在c#中可以这样调用d= fun(ref a,ref b, ref c[0]);就可以了
char * 一般可以使用string来传入;如果这个参数还要赋值后返回的话就用StringBuilder.
具体C++和C#类型的转换可以Google查下C++定义
//获取RFID卡数据
EXPORT short __stdcall RFID_ReadData(char * ,short,short,short *,char *);
C#调用
[DllImport("Schmidt_RFID_2030")]
private static extern short TC_RFID_ReadData(ref string sPassword, short iStartAddr, int iDataLen, ref int iCount, StringBuilder sTagData);