1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C#调用VC DLL 复杂结构 解决方法

C#调用VC DLL 复杂结构 解决方法

时间:2018-11-30 00:15:01

相关推荐

C#调用VC DLL 复杂结构 解决方法

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);

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。