标题:C++ 定义的 typedef struct {...}IDCARD_ALL; 结构 和方法 extern "C" int ...
取消只看楼主
wjshan0808
Rank: 2
等 级:论坛游民
帖 子:15
专家分:36
注 册:2013-3-6
结帖率:0
 问题点数:0 回复次数:0 
C++ 定义的 typedef struct {...}IDCARD_ALL; 结构 和方法 extern "C" int __stdcal
这个是C++的一个结构
程序代码:
typedef struct
{
char name[40];   //姓名
char sex[10];     //性别
char people[20];  //民族,护照识别时此项为空
char birthday[50]; //出生日期
char address[200]; //地址,在识别护照时导出的是国籍简码、
char signdate[50]; //签发日期,在识别护照时导出的是有效期至 
char validterm[50];  //有效期,在识别护照时为空,
char number[40];   //证件编码,在识别护照时为护照号 ;识别港澳通行证内页时为港澳证件号码
char other[100];    //备用,在识别护照时导出护照类型,识别港澳通行证封页时证件号;
char szCodeOne[256];//护照、台胞证、港澳通行证封页第一行机读码,
char szCodeTwo[256];//护照、台胞证、港澳通行证封页第二行机读码,
}IDCARD_ALL;
然后一个方法
extern "C" int __stdcall RecogIdcardOnlyALL( LPCTSTR imgfile_name, IDCARD_ALL & card, bool bSaveResultFile, int nHandPrint, int nContent, char* HeadImgFName );

我用 C# 这样转换
 
程序代码:
   /// <summary>
    /// 扫描时设置参数的结构体
    /// </summary>
    [StructLayout(LayoutKind.Sequential, Size = 256)]
    public struct IDCARD_ALL
    {
        /// <summary>
        /// 姓名
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
        public string name;
        /// <summary>
        /// 性别
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
        public string sex;
        /// <summary>
        /// 民族 护照识别时此项为空
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
        public string people;
        /// <summary>
        /// 出生日期
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
        public string birthday;
        /// <summary>
        /// 地址 在识别护照时导出的是国籍简码
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
        public string address;
        /// <summary>
        /// 签发日期 在识别护照是空
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
        public string signdate;
        /// <summary>
        /// 有效期
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
        public string validterm;
        /// <summary>
        /// 证件编码 在识别护照时为护照号 识别港澳通行证内页时为港澳证件号码
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
        public string number;
        /// <summary>
        /// 备用 在识别护照时导出护照类型,识别港澳通行证封页时证件号
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
        public string other;
        /// <summary>
        /// 护照 台胞证,第一行机读码,
        /// 一代身份证时,复印件标记
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
        public string szCodeOne;
        /// <summary>
        /// 护照 台胞证,第二行机读码
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
        public string szCodeTwo;
    }

然后 调用

 
               IDCARD_ALL idCardAll = new IDCARD_ALL();
                
                RecogNewIdcardOnlyALL(@"C:\scan9.BMP", ref idCardAll, true, 256, "scan9.BMP");

但是结果很悲剧 idCardAll 里面没数据。
这是为什么
搜索更多相关主题的帖子: color 
2014-08-06 16:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-434777-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052947 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved