这是动态库里面的原型函数int WINAPI MYGX(int port, char *Sign, char *BH, char *strReset, char *strMiWen3, char *strMac1, char *strKeyVer, char *strTime,char *strKey, char *strAuthenKey, char *strMac3); 输入参数:
 port
 IntSign    : 更新密钥的次数
 BH       :表号
strReset   : ESAM复位信息后8字节
 strMiWen3
 strMac1
 输出参数:
 strKeyVer :密钥版本号,为了和主站密钥版本做对比
 Time : 身份认证时效性
 strKey
 strMac3
 strAuthenKey
这是上面原型函数的说明
[DllImport("HNTestZhuZhan.dll")]
        public static extern int MYGX
        (int port, string Sign, string BH, string strReset, string strMiWen3, string strMac1, StringBuilder strKeyVer, StringBuilder strTime, StringBuilder strKey, StringBuilder strAuthenKey, StringBuilder strMac3);
        private void button1_Click(object sender, EventArgs e)
        {
            string Sign = "01";
            string BH = "000000000001";
            int port = comboBox1.SelectedIndex + 1;
            string strReset = "86935839aab50001";
            string strMiWen3 = "84aec3874ed6756642771ec6bad03a3e1404ab666645da5aed8b4f1b74e1bf30";
            string strMac1 = "15818dd0";
            StringBuilder strKeyVer = new StringBuilder();
            StringBuilder strTime = new StringBuilder();
            StringBuilder strKey = new StringBuilder();
            StringBuilder strAuthenKey = new StringBuilder();
            StringBuilder strMac3 = new StringBuilder();            MYGX(port ,Sign ,BH ,strReset ,strMiWen3 ,strMac1 ,strKeyVer ,strTime ,strKey ,strAuthenKey ,strMac3);
           
            textBox5.Text = strKeyVer.ToString ();
            textBox4.Text = strTime.ToString();
            textBox6.Text = strMac3.ToString();
            textBox7.Text = strAuthenKey.ToString();
            textBox8.Text = strKey.ToString ();点击button,不知道为什么只能得到strKeyVer的值.因为这个动态库里有好几个原型函数我调用其它的都能得到正确数据,不知道为什么调用上面这个原型函数的时候就得不到正确的数据,希望哪位高人指点指点..                      

解决方案 »

  1.   

    strReset : ESAM复位信息后8字节
    string strReset = "86935839aab50001"; 这个要是传过去取的该是开始8字节了吧
      

  2.   

                StringBuilder strKeyVer = new StringBuilder(128);
                StringBuilder strTime = new StringBuilder(128);
                StringBuilder strKey = new StringBuilder(128);
                StringBuilder strAuthenKey = new StringBuilder(128);
                StringBuilder strMac3 = new StringBuilder(128);
    创建StringBuilder实例时应该指定足够大的容量,否则如果返回的字符串比较长的时候就会出错了
      

  3.   


    不知道是不是你说的这个问题,好像要输出的strKey有256个字节的大小..那我是不是应该把
    StringBuilder strKey = new StringBuilder();
    改成
    StringBuilder strKey = new StringBuilder(256);
      

  4.   

    就是这样试一下,其它的StringBuilder也要指定,看还有没有问题?其实因为C#的字符是双字节的,对应这儿128就刚好够了,不过建议还是用回256最好
      

  5.   

    今天试了一下,就是StringBuilder没有指定大小的问题,就是因为strKey的内容比较大有256个字节,所有读不出来.
    改成StringBuilder strKey = new StringBuilder(256);后,就可以正常的读出数据了..