以下是c++中的函数:
Function PR2MagReadTrack2(hDev:integer;n:integer;const RecData:LPStr):integer;stdcall;
//功能: 读存折上的磁条二磁道信息
//参数:hDev-设备描述表,n-磁条标准,RecData-存放读到信息的指针.
//返回: 0-执行正确;小于0执行失败
//       -2 - 空白磁条
//       -3 - 读出错或校验错
//       -4 - 没有存折我在c#中是这样写的:
       [DllImport("pr2.dll", CharSet = CharSet.Ansi, EntryPoint = "PR2MagReadTrack2")]
       public static extern int PR2MagReadTrack2(int hDev, int n, StringBuilder RecData); StringBuilder m_magtrack2 = new StringBuilder(256);
int ival = PR2MagReadTrack2(m_hdev, 2, m_magtrack2);但运行时有时是好的,有时出错

解决方案 »

  1.   

          [DllImport("pr2.dll", CharSet = CharSet.Ansi, EntryPoint = "PR2MagReadTrack2")] 
          public static extern int PR2MagReadTrack2(int hDev, int n, string RecData); 
    上面是const,不要用stringbuilder
      

  2.   

    你DLL中的函数参数有问题 const LPStr 用来输出.....
      

  3.   

    new StringBuilder(256); 256够用吗?
      

  4.   

    LP的含义是长指针(long pointer)。LPSTR是一个指向以‘\0’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。
    而LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变,除此之外,它与LPSTR是等同的。