百思不得其解,GetForm出现“DLL调用约定错误”

西雀 2006-11-04 03:24:06
Public Function ReturnForm(pFormName As String) As FORM_INFO_1
Dim PrinterHandle As Long ' 打印机句柄
Dim pFI1 As FORM_INFO_1
Dim Temp() As Byte
Dim BytesNeeded As Long
Dim RetVal As Long

If OpenPrinter(Printer.DeviceName, PrinterHandle, 0&) = 0 Then Exit Function ' 返回一个打印机句柄

ReDim Temp(0)
RetVal = GetForm(PrinterHandle, pFormName, 1, Temp(0), 0&, BytesNeeded)
ReDim Temp(BytesNeeded)

If GetForm(PrinterHandle, pFormName, 1, Temp(0), BytesNeeded, BytesNeeded) = 0 Then
Debug.Print "错误:" & Err.LastDllError
Else
Debug.Print "成功返回" & pFormName
End If
Call CopyMemory(pFI1, Temp(0), BytesNeeded)
ReturnForm = pFI1
Call ClosePrinter(PrinterHandle)
End Function

该函数能正常返回,但对于某些特定的pFormName,却会出现“DLL调用约定错误”,比如:
ReturnForm "A3 Extra Transvers"时就会出现此错误
ReturnForm "A3 Extra Transver" 就不会出现此错误("A3 Extra Transver"是我自定义的Form)

而且错误是在函数正常结束后出现的,此时函数也已经正常返回了pFI1的值。

代码方面我想是不会有问题的,实在不知道这个错误从何而来。
...全文
216 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
西雀 2006-11-06
  • 打赏
  • 举报
回复
XP
单步调试也出现错误,他总是在函数成功返回后出错
Dunzip 2006-11-05
  • 打赏
  • 举报
回复
可能是打印机器不支持这种纸张大小,或者打印机处于脱机状态。

大熊猫侯佩 2006-11-05
  • 打赏
  • 举报
回复
1 运行的操作系统?

2 运行出错的话单步调试出错么?
西雀 2006-11-05
  • 打赏
  • 举报
回复
楼上说的我测试过,不是那个原因
西雀 2006-11-05
  • 打赏
  • 举报
回复
一天过去了..

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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