未能封送类型,因为嵌入数组实例的长度与布局中声明的长度不匹配

cellblue 2009-03-05 10:33:11
深圳市奥格立电子有限公司 税控器接口调用打印发票时出的问题,使用了他们提供的OCX


未能封送类型,因为嵌入数组实例的长度与布局中声明的长度不匹配

FiscalOcx.T_wNormalInvInfo mWTNII = new FiscalOcx.T_wNormalInvInfo(); //OCX中的结构体
FiscalOcx.T_rNormalInvInfo mRINII = new FiscalOcx.T_rNormalInvInfo(); //OCX中的结构体

mWTNII.sPayer = this.txtPayer.Text; //付款单位名称(最多60字节ASC)
mWTNII.nItemCount = (byte)1; //总经营项目个数 1B(即cInvItems中有效下标个数)
mWTNII.cInvItems = new FiscalOcx.T_InvItem[1];
mWTNII.cInvItems[0] = new FiscalOcx.T_InvItem();
mWTNII.cInvItems[0].sTaxindex = "1"; //税种税目索引
mWTNII.cInvItems[0].fsum = 1000; //销售金额

int mReturnValue = this.axTFiscal1.MakeInvoice(ref mWTNII, ref mRINII); //调用这里的时候出错


说明文档中提供的信息
Function MakeInvoice(cwNormalInvInfo As T_wNormalInvInfo, crNormalInvInfo As T_rNormalInvInfo) As Long

Type T_wNormalInvInfo
sPayer As String '付款单位名称(最多60字节ASC)
nItemCount As Long '总经营项目个数 1B(即cInvItems中有效下标个数)
cInvItems(5) As T_InvItem '经营项目内容
End Type

Type T_InvItem
sTaxindex As String '税种税目索引 1B
fsum As Double '销售金额 4B
End Type

Type T_rNormalInvInfo
sReceiverno As String '机器编号8B
sPayee As String '纳税人名称 40B
sAntiForgeryCode As String '税控防伪码 20B
sDate As String '开票日期4B
sTime As String '开票时间2B
sPrintno As String '机打票号 4 hex
sInvCode As String '发票代码 4 bcd
End Type

他们提供了VB的范例代码

Dim wInv As T_wNormalInvInfo, rInv As T_rNormalInvInfo, iret%
wInv.sPayer = "一二三四五六七八九十一二三四五六七八九十"
wInv.nItemCount = 1
wInv.cInvItems(0).sTaxindex = "01"
wInv.cInvItems(0).fsum = 1000
iret = TFiscal1.MakeInvoice(wInv, rInv)

项目都是使用C#开发的,不能因此提供出一个VB的外挂程序



...全文
828 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cellblue 2009-03-07
  • 打赏
  • 举报
回复
需要设置6个长度的数组,晕倒了,被雷了
悔说话的哑巴 2009-03-06
  • 打赏
  • 举报
回复
这个不会,顶
relive_qiankai 2009-03-06
  • 打赏
  • 举报
回复
学习,关注!
cellblue 2009-03-06
  • 打赏
  • 举报
回复
thanks
试试看,对了,可以从他们的DEMO中监视一下
cnming 2009-03-06
  • 打赏
  • 举报
回复
还有,是否送入的数组需要固定的长度,预先初始化一下,有些人对接口的写法图省事会这样处理的

例如这个帖中谈论到的问题

http://topic.csdn.net/t/20051207/16/4444111.html
cellblue 2009-03-05
  • 打赏
  • 举报
回复
错误原因是mWTNII.cInvItems = new FiscalOcx.T_InvItem[1]; 导致的,只要申明了这个数组,无论是0长度的,也会报错
cellblue 2009-03-05
  • 打赏
  • 举报
回复
总经营项目个数 1B 仅1个字节,但是数据类型显示为int,即使我不做限制直接给int,也是不行的
一半乐事 2009-03-05
  • 打赏
  • 举报
回复
好像是这里的问题吧?
mWTNII.nItemCount = (byte)1; //总经营项目个数 1B(即cInvItems中有效下标个数)
nItemCount是long类型的,为什么要转成byte?
cjla580 2009-03-05
  • 打赏
  • 举报
回复
帮顶。。。。。。。。
cnming 2009-03-05
  • 打赏
  • 举报
回复
自己写个struct,然后使用unsafe方式调用如何
cellblue 2009-03-05
  • 打赏
  • 举报
回复
up
shulei521 2009-03-05
  • 打赏
  • 举报
回复
............................
tryanother 2009-03-05
  • 打赏
  • 举报
回复
学习
cellblue 2009-03-05
  • 打赏
  • 举报
回复
up

111,126

社区成员

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

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

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