c#调用DLL文件发生错误!!应用程序发生错误,未知的软件异常[DllImport("idcarddll.dll", EntryPoint = "RecogNewIdcardALL ",
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int RecogNewIdcardALL(string imgfile_name, ref IDCARD idcard, bool bSaveResultFile, int nContent, string HeadImgFName);结构体
public struct IDCARD
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 7)]
public string name; //姓名
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string sex; //性别
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string people; //民族,
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
public string birthday; //出生日期
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
public string address; //地址,
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
public string signdate; //签发日期,
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string validterm; //有效期,
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
public string number; //证件编码,
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string other; //备用,
};
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int RecogNewIdcardALL(string imgfile_name, ref IDCARD idcard, bool bSaveResultFile, int nContent, string HeadImgFName);结构体
public struct IDCARD
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 7)]
public string name; //姓名
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string sex; //性别
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string people; //民族,
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
public string birthday; //出生日期
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
public string address; //地址,
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
public string signdate; //签发日期,
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string validterm; //有效期,
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
public string number; //证件编码,
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string other; //备用,
};
建议先将动态连接库的调用放到一个没有任何逻辑代码的程序中去测试,确保dll文件的位置,函数入口点,调用规则等都填写正确,这样可以避免复杂环境的影响,一般用控制台程序几行代码就可以搞定