本帖最后由 zhangqiang1283 于 2010-04-29 17:34:00 编辑

解决方案 »

  1.   

    string pin="111";
    你这个pin只能是字符串么??
      

  2.   

    不太清楚,要不试下 ref byte[] pin
      

  3.   

    byte[]   pin=   null;   
      pin=   new   ASCIIEncoding().GetBytes("111");   
      string   myStr=new   UnicodeEncoding().GetString(pin);
      

  4.   

    C#中key.UsbUserLogin封装后的原型是什么?byte[] pin= System.Text.Encoding.Ascii.GetBytes("111");
    key.UsbUserLogin(hkey,ref pin[0] ,3);
      

  5.   


    封装后的原型是:
    void Ikey.UsbUserLogin(int hkey,ref byte lpPinStr,int pinStrLen)
      

  6.   


    封装后的原型是:
    void Ikey.UsbUserLogin(int hkey,ref byte lpPinStr,int pinStrLen)我有个不解的地方是:
    我在C++封装的接口返回值类型是HRESULT ,而且通过HRESULT 类型的返回值去判断与硬件key的通信是否成功。
    但是到C#下,封装后的接口返回值类型成了void,那我就不能获取到返回值了啊,也就不能通过返回值判断与硬件key的交互是否成功了啊!
      

  7.   

    http://topic.csdn.net/u/20100416/15/237ea3e7-7162-410e-9a34-b6dd93781dd4.html调用方法没问题,但是需要手工写一个封装。用[PreserveSig]来声明不要把HRESULT吃掉http://topic.csdn.net/u/20080416/15/e17805a1-57a8-4c0a-a2ca-c03dd07e85fb.html
      

  8.   

    DllImportAttribute.PreserveSig 字段
    http://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.dllimportattribute.preservesig(VS.80).aspxhttp://msdn.microsoft.com/zh-cn/library/aa288455(VS.71).aspx
    在 COM 中,返回成功或失败的常用方法是返回一个 HRESULT,并在 MIDL 中有一个标记为“retval”、用于方法的实际返回值的 out 参数。在 C#(和 .NET Framework)中,指示已经发生错误的标准方法是引发异常。默认情况下,.NET Framework 为由其调用的 COM 接口方法在两种异常处理类型之间提供自动映射。 返回值更改为标记为 retval 的参数的签名(如果方法没有标记为 retval 的参数,则为 void)。
    标记为 retval 的参数从方法的参数列表中剥离。
    任何非成功返回值都将导致引发 System.COMException 异常。CodePlex开源版Tlbimp.exe的两个新功能
    http://blogs.msdn.com/silverlightshanghai/archive/2008/10/15/codeplex-tlbimp-exe.aspx