C#调用dll的问题,痛苦啊!!望高手进来看看!!

yu_zhi_wei 2010-08-13 12:10:37
如下为dll中的原代码:
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];
};

函数:
long __stdcall Get_IdcData(int iCardType, char* szFileNameIn, char *szFullFileNameOut, char *szHeadFileNameOut, ID_CARD_S* pstOut);
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

我是这么定义的:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct HY_RECT_S
{
public long lLeft;
public long lRight;
public long lTop;
public long lBottom;
};


[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct ID_CARD_S
{
[MarshalAs(UnmanagedType.ByValArray,SizeConst=2560)]
public byte[,] szText;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public HY_RECT_S[] idRect;
}

[DllImport("IDRCore.dll", EntryPoint = "Get_IdcData", CharSet = CharSet.Ansi)]
public static extern int Get_IdcData(int iCardType, string szFileNameIn, string szFullFileNameOut, string szHeadFileNameOut, ref ID_CARD_S pstOut);


执行函数:
Get_IdcData(iCardType, szFileNameIn, szFullFileNameOut, szHeadFileNameOut, ref pId_Card) 是成功的,但去不到pId_Card的值出来,忙了好久了,都没搞定,希望大家来帮帮忙!!!
...全文
66 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jointan 2010-08-13
  • 打赏
  • 举报
回复
[MarshalAs(UnmanagedType.ByValArray,SizeConst=2560)]
public byte[,] szText;
直接改为byte[] szText;

然后每次取256个字节创建一个string就可以了吧
xiongcaoyuanlang 2010-08-13
  • 打赏
  • 举报
回复
我也看不懂你的程序,先帮你顶顶。
wuchao241241 2010-08-13
  • 打赏
  • 举报
回复
看不懂你的程序,结构我也没搞好。帮你顶顶吧!

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧