日期:2014-05-20  浏览次数:21039 次

c#调用delphi动态库问题
1:
Delphi函数原型
Function ReadData(var DataLen:integer; var Data:Pchar):pchar; StdCall;
参数说明:DataLen:为读回的数据的长度, Data为数据,固定为ASCII类型

2:
在c#里面怎么调用,望高手给个完整代码,今天搞不定就死定了,郁闷,我试了都不行 

这个调试不成功,我叫供应商换了一个函数
public static extern byte[] GetDataByteArray(); 这个是c#定义的 跟上面的函数功能是一样的,试过很多调试方法都不行
int len;
  string ss = "";
  //byte[] bvalues;
  len = GetDataLen();
  // bvalues = new byte[flag];
  int lpByte = 0;
  lpByte = (int)GetDataByteArray();//这里出现错误说内存错误!
  byte[] vbyte = new byte[len];
  for (int i = 0; i < len; i++)
  {
  vbyte[i] =(byte) Marshal.PtrToStructure((IntPtr)(lpByte++), typeof(byte));
  ss = ss + vbyte[i].ToString();
  }

3:
还有一个函数public static extern string GetData();
这个函数调用成功,但返回来的数据丢了,我机器上的数据是这样的结构的
A5 5A 01 00 49 1A 0E 16 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 89 0后面遇到0就截除了这个要怎么处理.我不知道是getdata这个函数返回的数据截除了还是我转换的时候截除了,这个要怎么改?
string ss = "";
  string StrWhole="";
  byte[] values;
  StrWhole = GetData();
  MessageBox.Show(StrWhole.Length.ToString () );//这里得到2,但不可能这么小
   
  values = System.Text.Encoding.Default.GetBytes(StrWhole );
  for (int i = 0; i < values.Length; i++)
  {
  ss = ss + values[i].ToString();
  }
  MessageBox.Show(ss);//这里得到A5 5A 01

不耻下问,谢谢告诉能帮我解决这个问题!

------解决方案--------------------
我以前调用过一个delphi的接口,但是因为delphi里面类型和C#的类型好像不一样,导致最后还是没有调用成功。
delphi我也不太懂,我个人的建议是先把接口的参数类型是不是一样搞清楚,然后能得到数据之后一点点处理问题。