VC的结构
struct HY_RECT_S
{
long lLeft;
long lRight;
long lTop;
long lBottom;
};
struct ID_CARD_S
{
char szText[10][256];
HY_RECT_S idRect[10];
};
花了很久才解决 贴出来代码 跟遇到同样问题的朋友分享下
Code
usingSystem;
usingSystem.Collections.Generic;
ponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Runtime.InteropServices;
namespaceTest
{
publicpartialclassForm1:Form
{
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi,Pack=1)]
publicstructHY_RECT_S
{
publiclonglLeft;
publiclonglRight;
publiclonglTop;
publiclonglBottom;
}
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi,Pack=1)]
publicstructID_CARD_S
{
[MarshalAs(UnmanagedType.ByValArray,SizeConst=2560)]
publicbyte[]szText;
[MarshalAs(UnmanagedType.ByValArray,SizeConst=10)]
publicHY_RECT_S[]idRect;
}
[DllImport("D:\\DLL\\IDRCore.dll",EntryPoint="Get_IdcData",CharSet=CharSet.Ansi)]
publicexternstaticintGet_IdcData(
intiCardType,
stringszFileNameIn,
StringszFullFileNameOut,
StringszHeadFileNameOut,
refID_CARD_SpstOut);
[DllImport("D:\\DLL\\IDRCore.dll",EntryPoint="Device_Open",CharSet=CharSet.Ansi)]
publicstaticexternintDevice_Open();
[DllImport("D:\\DLL\\IDRCore.dll",EntryPoint="Get_IdcPic",CharSet=CharSet.Ansi)]
unsafepublicstaticexternintGet_IdcPic(intiCardType,StringszFileNameIn);
publicForm1()
{
InitializeComponent();
}
privatevoidbutton4_Click(objectsender,EventArgse)
{
ID_CARD_SidCardS=newID_CARD_S();
StringBuilderszFullFileNameOut=newStringBuilder(1024);
StringBuilderszHeadFileNameOut=newStringBuilder(1024);
unsafe
{
//fixed(ID_CARD_S*pids=&idCardS)
//{
//IntPtripIds=(IntPtr)pids;
inti0=Device_Open();
inti1=Get_IdcPic(2,"C:\\1.bmp");
inti2=Get_IdcData(2,"C:\\1.bmp","C:\\2.bmp","C:\\3.bmp",refidCardS);
byte[]result=newbyte[256];
String[]strResult=newString[10];
intk=0;
for(inti=0;i<10;i++)
{
for(intj=0;j<256;j++)
{
result[j]=idCardS.szText[k++];
}
strResult[i]=FromASCIIByteArray(result);
}
strings=FromASCIIByteArray(idCardS.szText);
MessageBox.Show(s);
//}
}
}
publicstaticStringFromASCIIByteArray(byte[]characters)
{
EncodingmyEncoding=Encoding.GetEncoding("gb2312");
stringsData=myEncoding.GetString(characters);
stringconstructedString=sData.Trim().TrimEnd('\0');
return(constructedString);
}
}
}