首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

急求解决,关于C#调用动态库有关问题!

2012-05-05 
急求解决,关于C#调用动态库问题!!动态库中函数如下:2.脱机读取卡号函数声明intykt_readopencardno_local (

急求解决,关于C#调用动态库问题!!
动态库中函数如下:
2.脱机读取卡号
函数声明int ykt_readopencardno_local (char *pRegion, char *pDeptid,char *pDeptKey, char * pCardtype,char * pCardno, char *pWarnmsg,char *pErrmsg)

返回0,成功,-1失败

这个应该是C++动态库吧?我需要从该函数中得到如下信息:
pRegionChar(4)地区编号
pDeptIDChar(4)网点编号
pDeptKeyChar(512)网点密钥
pCardtypeChar(2)卡类型
pCardnoChar(20)卡号
pWarnmsgChar(1024)警告信息
pErrmsgChar(1024)错误信息

我用C#调用该动态库函数,函数调用声明如下:
[DllImport("fzyktclient.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int ykt_readopencardno_local([Out]StringBuilder pRegion, [Out]StringBuilder pDeptid, [Out]StringBuilder pDeptKey, [Out]StringBuilder pCardtype, [Out]StringBuilder pCardno, [Out]StringBuilder pWarnmsg, [Out]StringBuilder pErrmsg);

具体的C#调用类型我不太清楚,不知道该怎么写?我试过string、[Out]IntPtr、 [Out]IntPtr[] 等等一些,程序都执行成功了,但函数返回值都为-1,失败了,是我类型声明有问题,还是怎么的?我到底该用哪种类型调用啊?如何才能得到我要的信息?求朋友解答一下,小弟感激不尽!!


[解决办法]
char*用byte[]试一下
[解决办法]
StringBuilder 前面不需要加[Out]属性

另外调用时你的StringBuilder 类型要进行初始化.根据你前面提到的长度将所有的StringBuilder 都初始为相应的长度,再调用ykt_readopencardno_local

StringBuilder pRegion =new StringBuilder(4);
...

热点排行