关于C#调用C++的DLL时出现的问题C++ code:
结构原型:
typedef struct ik_longshine_person_info_s
{

int person_id;
char person_name[128];         
char employee_num[128];
int iris_enroll_flag; 
         int sex;
char blood_type[20];
char birthday[20];
char id_card[64];
char phone[64];
char address[256];
char zip_code[20];
char email_addr[128];
}ik_longshine_person_info_t;typedef struct ik_longshine_person_array_s
{
int person_count;
ik_longshine_person_info_t *persons;
}ik_longshine_person_array_t;,// 输入参数 ik_longshine_person_info_t *pPerson , 输出参数 local_person, server_person中的persons指向的内存需要调用ik_as_free来释放

int STDCALL ik_as_sync_person (IK_LS_ATTEND_SERVER_HANDLE handle, ik_longshine_person_info_t *pPerson, int nPersonCount,ik_longshine_person_array_t *local_person,ik_longshine_person_array_t *server_person);下边是我写的代码,大家帮忙看看错在哪里谢谢了
[DllImport("IKLongShine-2_0_0.dll")]
public extern unsafe static int ik_as_sync_person(IntPtr handle,ik_longshine_person_info_t[] pPerson,int nPersonCount,out ik_longshine_person_array_t local_person,out ik_longshine_person_array_t server_person);    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public struct ik_longshine_person_info_t
    {              
        //必填项
        public int person_id;                         
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
        public string person_name;                                     
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
        public string employee_num;                                        
        public int iris_enroll_flag;                                                  
        //选填项
        public int sex;                                             
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
        public string blood_type;                                             
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
        public string birthday;                                             
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
        public string id_card;                                             
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
        public string phone;                                         
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
        public string address;                                             
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
        public string zip_code;                                             
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
        public string email_addr;                                              
   
    }    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public struct ik_longshine_person_array_t
    {
        [MarshalAs(UnmanagedType.SafeArray)]
        public ik_longshine_person_info_t[] persons;     
        public int person_count;                        
    }
private void btnTongbu_Click(object sender, EventArgs e)
        {
            
            ConnDB.Constr = readINI();
            ConnDB.Open();
            string ip = "127.0.0.1";
            IntPtr handle = ik_as_connect(ip, 9988, 1000);
            MessageBox.Show(handle.ToString());
            ik_longshine_person_info_t[] persons = new ik_longshine_person_info_t[1750];
            ik_longshine_person_array_t local;
            ik_longshine_person_array_t server;
            DataSet ds = new DataSet();
            ds = ConnDB.GetData("select irisID,name,serialNum from tb_emp_info");          
            DataTable dt = ds.Tables[0];
            int count = 0;
            for (int i = 0; i < dt.Rows.Count;i++ )
            {
                persons[i].person_id = Convert.ToInt32(dt.Rows[i]["irisID"]);
                persons[i].person_name = dt.Rows[i]["name"].ToString();
                persons[i].employee_num = dt.Rows[i]["serialNum"].ToString();
                persons[i].iris_enroll_flag = 0;
                count = i;
            }            
            int tongbuMsg = ik_as_sync_person(handle, persons, count, out local, out server);   //此处报异常
                         
            MessageBox.Show(tongbuMsg.ToString());
            ik_longshine_person_info_t[] localPerson = local.persons;
            int localCount = local.person_count;
            ik_longshine_person_info_t[] serverPerson = server.persons;
            int serverCount = server.person_count;
            int delMsg = ik_as_del_person(handle, serverPerson, serverCount);
            MessageBox.Show(delMsg.ToString());
            ik_as_close(handle);
            
        }ik_as_connect为连接服务器函数,如果服务器没有连接正常 就会出现这个异常,现在服务器没问题,返回的句柄也正确 怎么还会出现异常呢异常信息:
   在 MainFrm.ik_as_sync_person(IntPtr handle, ik_longshine_person_info_t[] pPerson, Int32 nPersonCount, ik_longshine_person_array_t& local_person, ik_longshine_person_array_t& server_person)
   在 MainFrm.btnTongbu_Click(Object sender, EventArgs e) 位置 MainFrm.cs:行号 534