调用动态库的问题(高分)

bdsutx 2012-05-30 02:43:32
这是动态库里面的原型函数

int WINAPI MYGX(int port, char *Sign, char *BH, char *strReset, char *strMiWen3, char *strMac1, char *strKeyVer, char *strTime,char *strKey, char *strAuthenKey, char *strMac3);

输入参数:
port
IntSign : 更新密钥的次数
BH :表号
strReset : ESAM复位信息后8字节
strMiWen3
strMac1
输出参数:
strKeyVer :密钥版本号,为了和主站密钥版本做对比
Time : 身份认证时效性
strKey
strMac3
strAuthenKey
这是上面原型函数的说明


[DllImport("HNTestZhuZhan.dll")]
public static extern int MYGX
(int port, string Sign, string BH, string strReset, string strMiWen3, string strMac1, StringBuilder strKeyVer, StringBuilder strTime, StringBuilder strKey, StringBuilder strAuthenKey, StringBuilder strMac3);
private void button1_Click(object sender, EventArgs e)
{
string Sign = "01";
string BH = "000000000001";
int port = comboBox1.SelectedIndex + 1;
string strReset = "86935839aab50001";
string strMiWen3 = "84aec3874ed6756642771ec6bad03a3e1404ab666645da5aed8b4f1b74e1bf30";
string strMac1 = "15818dd0";
StringBuilder strKeyVer = new StringBuilder();
StringBuilder strTime = new StringBuilder();
StringBuilder strKey = new StringBuilder();
StringBuilder strAuthenKey = new StringBuilder();
StringBuilder strMac3 = new StringBuilder();

MYGX(port ,Sign ,BH ,strReset ,strMiWen3 ,strMac1 ,strKeyVer ,strTime ,strKey ,strAuthenKey ,strMac3);

textBox5.Text = strKeyVer.ToString ();
textBox4.Text = strTime.ToString();
textBox6.Text = strMac3.ToString();
textBox7.Text = strAuthenKey.ToString();
textBox8.Text = strKey.ToString ();

点击button,不知道为什么只能得到strKeyVer的值.因为这个动态库里有好几个原型函数我调用其它的都能得到正确数据,不知道为什么调用上面这个原型函数的时候就得不到正确的数据,希望哪位高人指点指点..
...全文
114 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdsutx 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
就是这样试一下,其它的StringBuilder也要指定,看还有没有问题?其实因为C#的字符是双字节的,对应这儿128就刚好够了,不过建议还是用回256最好
[/Quote]
今天试了一下,就是StringBuilder没有指定大小的问题,就是因为strKey的内容比较大有256个字节,所有读不出来.
改成StringBuilder strKey = new StringBuilder(256);后,就可以正常的读出数据了..
WAN 2012-05-30
  • 打赏
  • 举报
回复
就是这样试一下,其它的StringBuilder也要指定,看还有没有问题?其实因为C#的字符是双字节的,对应这儿128就刚好够了,不过建议还是用回256最好
bdsutx 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
StringBuilder strKeyVer = new StringBuilder(128);
StringBuilder strTime = new StringBuilder(128);
StringBuilder strKey = new StringBuilder(128);
StringBuilder strAuthenKey = new StringBuilder……
[/Quote]

不知道是不是你说的这个问题,好像要输出的strKey有256个字节的大小..那我是不是应该把
StringBuilder strKey = new StringBuilder();
改成
StringBuilder strKey = new StringBuilder(256);
WAN 2012-05-30
  • 打赏
  • 举报
回复
StringBuilder strKeyVer = new StringBuilder(128);
StringBuilder strTime = new StringBuilder(128);
StringBuilder strKey = new StringBuilder(128);
StringBuilder strAuthenKey = new StringBuilder(128);
StringBuilder strMac3 = new StringBuilder(128);
创建StringBuilder实例时应该指定足够大的容量,否则如果返回的字符串比较长的时候就会出错了
__天涯寻梦 2012-05-30
  • 打赏
  • 举报
回复
有没有原型函数直接调用的例子?
bdsutx 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
strReset : ESAM复位信息后8字节
string strReset = "86935839aab50001"; 这个要是传过去取的该是开始8字节了吧
[/Quote]

这都是已经取好的数据..
__天涯寻梦 2012-05-30
  • 打赏
  • 举报
回复
strReset : ESAM复位信息后8字节
string strReset = "86935839aab50001"; 这个要是传过去取的该是开始8字节了吧

111,126

社区成员

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

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

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