厂家提供的接口文件时delphi写的,
引用接口之后一些参数不知道应该转换成什么,而导致“尝试读取或写入内存失败”的错误信息原接口文件是这样的:BYTE Read_Guest_Card( BYTE AReaderType, BYTE ACardType, BYTE APort, BYTE ASector, BYTE ABlock, BYTE * AHotelPwd,int ALockNo, BYTE AStartSuite, BYTE AEndSuite, int ACardID, int ASubCardID, char * ATime )我调用时是这样写的:
        public static extern int Read_Guest_Card(byte AReaderType, byte ACardType, byte APort, byte ASector, byte ABlock, string AHotelPwd, int ALockNo, byte AStartSuite, byte AEndSuite, int ACardID, int ASubCardID,string ATime);但是执行到这一步就会报出那个错误。望高手指点。    在线等。

解决方案 »

  1.   

    char * ??这个应该不是Delphi吧。怎么看起来是c或C++呢
      

  2.   

    说明文件里那么写的,我不会delphi也不知道语法是怎么样的
      

  3.   

    BYTE *-----byte[]
    char*------StringBuilder
      

  4.   

    public static extern byte ..........
      

  5.   

    类型不对:public static extern byte Read_Guest_Card(byte AReaderType, byte ACardType, byte APort, byte ASector, byte ABlock, string AHotelPwd, int ALockNo, byte AStartSuite, byte AEndSuite, int ACardID, int ASubCardID,string ATime);
      

  6.   

    你问问厂家,是不是有需要回传的参数,那个是需要回传的参数,就要使用Ref或StringBuilder来实现了。
      

  7.   

    一般说来,如果dll中的函数参数含有var,则c#中要加上ref(引用);
    否则,会有提示错误:“尝试读取或写入受保护的内容。这通常指示其他内存已损坏”
      

  8.   

    我看VB的demo里边 基本上每个参数都有ByVal 是不是你说的val?
      

  9.   

    你的[dllimport()]这块怎么写的?
      

  10.   

    [DllImport("btLock56.dll", EntryPoint = "Read_Guest_Card", SetLastError = true, CharSet = CharSet.Unicode,
                 ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
            public static extern byte Read_Guest_Card( byte AReaderType, byte ACardType, byte APort, byte ASector, byte ABlock, byte[] AHotelPwd,ref int ALockNo, byte AStartSuite, byte AEndSuite, int ACardID, int ASubCardID,ref StringBuilder ATime);
      

  11.   

    使用out关键字试试, Byte在C#里是个结构体.如果ref byte[] 不行的情况使用out Byte试试。
      

  12.   

    我那个byte[] 的没有用ref.
      

  13.   

    哦,对了,应该从第7个参数 就是那个LockNo之后都是要回传的 看来我问题应该是出在这里了
      

  14.   

    我早想继续发了 但是一个人最多连续回复3次   貌似还有问题   不知道是厂家给的接口问题还是怎么   刚才那个是读卡写卡的时候总是提示 “外部组件发生异常”。 而且我发现用他们的demo和我现在写的读卡报错都报的一模一样  不过最起码不是系统错误了。 是程序集返回的错误
      

  15.   

    厂家给的Demo也是有很多错误的,你先用串口调试工具调试一下读卡设备吧。。
      

  16.   

    今天测试卡机都可以连到  并且听到 嘟嘟 的声音 可惜就是又返回那个“尝试读取或写入受保护的内容。这通常指示其他内存已损坏”的提示。在函数里 如果 我把public static extern byte Read_Guest_Card( byte AReaderType, byte ACardType, byte APort, byte ASector, byte ABlock, byte[] AHotelPwd,ref int ALockNo, byte AStartSuite, byte AEndSuite, int ACardID, int ASubCardID,ref StringBuilder ATime); 其中的 AHotelPwd 的类型换成string 卡机还响一声。 如果是byte[] 直接就返回密码错误    今天把demo弄好了  demo是VB写的  AHotelPwd 是string * 8 类型   Atime是string * 10类型。