当前位置: 代码迷 >> C# >> C#调用dll执行这个能自动退出
  详细解决方案

C#调用dll执行这个能自动退出

热度:270   发布时间:2016-04-28 08:37:27.0
C#调用dll执行这个会自动退出
        [DllImport("QHD_SmartMC.dll", EntryPoint = "QHD_OpenPort",
                CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] 
        static extern int QHD_OpenPort(ref StringBuilder oErrMsg);
        [DllImport("QHD_SmartMC.dll", EntryPoint = "QHD_ClosePort",
                CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
        static extern int QHD_ClosePort(ref StringBuilder oErrMsg);
        [DllImport("QHD_SmartMC.dll", EntryPoint = "QHD_ReadCard",
                CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
        static extern int QHD_ReadCard(ref StringBuilder oInfo, ref StringBuilder oErrMsg);

int __stdcall QHD_OpenPort(char *oErrMsg);
int __stdcall QHD_ClosePort(char *oErrMsg);
int __stdcall QHD_ReadCard(char *oInfo,char *oErrMsg);

执行 
        private void button1_Click(object sender, EventArgs e)
        {
            StringBuilder str1 = new StringBuilder(0);
            int str2 = QHD_OpenPort(ref str1);
            textBox1.Text = str2.ToString();
            textBox2.Text += str1.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            StringBuilder str1 = new StringBuilder(0);
            int str2 = QHD_ClosePort(ref str1);
            textBox1.Text = str2.ToString();
            textBox2.Text += str1;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            StringBuilder str0 = new StringBuilder(0);
            StringBuilder str1 = new StringBuilder(0);
            try
            {
                int str2 = QHD_ReadCard(ref str1,ref str0);
                textBox1.Text = str2.ToString();
                textBox2.Text += str1.ToString() + str0.ToString();
            }
            catch
            {
                textBox1.Text = "err";
            }

        }

就执行ReadCard 的时候什么也不提示直接退出掉了 怎么回事呀 是不是类型不对 大神帮下忙
------解决思路----------------------
那就把所有参数(4个char*)全换成StringBuilder,不要ref
传的参数用new StringBuilder(8000);
  相关解决方案