要调用一个DLL中的函数
函数原型如下:
ExpandData
展开交易记录数据。
  function ExpandData (
dType:integer;
pData:PChar;
buf:PRecData):integer; 参数
sType
交易记录类型。0:考勤门禁机记录;1:餐饮收费机记录。
pData
待展开的字符串。考勤记录为13字节,消费记录为16字节。
buf
数据结构指针,指向返回数据的结构。 返回值
如果函数调用成功,返回值为1000。
如果函数调用失败,返回值不为1000。如需得到错误描述,请调用GetTAErrMsg。 说明
返回的数据结构如下:
  RecData = record
    RecType:string; //记录类型
    CardNo:string; //卡号
    RecTime:Tdatetime; //时间
    Fare:real; //交易金额
    Balance:real; //余额
    CardType:integer; //消费卡类
    MealType:integer; //餐别
    OperNo:string; //操作类型(保留)
  end;
  PRecData=^RecData; //指向以上结构的指针相对考勤记录,结构中只有卡号和时间为有效内容。消费额等只对餐饮消费记录才有意义。其中数据结构指针在C#中 怎么实现啊?

解决方案 »

  1.   

    看看这个合适不?
    [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
    internal struct RecData 
    {
    public string RecType;
    public string CardNo;
    public DateTime RecTime;
    public float Fare;
    public float Balance;
    public int CardType;
    public int MealType;
    public string OperNo;
    }[DllImport("你的dll", SetLastError=true, CharSet=CharSet.Auto)]
    private static extern int ExpandData(int dType, ref char pData, ref RecData pRecData);代码:RecData _rectData = new RecData();
    //你自己的赋值代码
    char s = 's';
    ExpandData(10000, ref s, ref _rectData);
      

  2.   

    c:\inetpub\wwwroot\WebApplication1\WebForm4.aspx.cs(85): 可访问性不一致: 参数类型“ref WebApplication1.WebForm4.RecData”比方法“WebApplication1.WebForm4.RefComm.ExpandData(int, string, ref WebApplication1.WebForm4.RecData)”的访问性低怎么报这个错?
      

  3.   

    那你改成这样
    [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
    public struct RecData 
    {
    public string RecType;
    public string CardNo;
    public DateTime RecTime;
    public float Fare;
    public float Balance;
    public int CardType;
    public int MealType;
    public string OperNo;
    }[DllImport("你的dll", SetLastError=true, CharSet=CharSet.Auto)]
    public static extern int ExpandData(int dType, ref char pData, ref RecData pRecData);代码:RecData _rectData = new RecData();
    //你自己的赋值代码
    char s = 's';
    ExpandData(10000, ref s, ref _rectData);
      

  4.   

    全部public总是不好的lz根据自己的类的封装情况修改一下吧