我在编写一个打印程序时碰到一个问题,请各位高手解答
这个api 声明如下
Public Declare Function AddForm Lib "winspool.drv" Alias "AddFormA" (ByVal hPrinter As Long, ByVal Level As Long, pForm As Byte) As Long
其中第三个参数要求是: pForm As Byte,这是一个引用传递,应该是传地址吧,
我建立一个自定义类型(根据系统声明)
Dim myform As FORM_INFO_1(API定义的类型)
myform.ImageableArea.Bottom = 1
myform.ImageableArea.Left = 1
myform.ImageableArea.Right = 1
myform.ImageableArea.Top = 1
myform.pName = "myform"
myform.Size.cx = 100
myform.Size.cy = 100
根据说明应该把这个自定义类型的一个实例传给AddForm函数,也就是pForm参数是一个指向myform的指针,我的理解正确吗?怎样把myform转换成Byte类型?这个函数该怎样用?

解决方案 »

  1.   

    不用转换,声明成pForm As FORM_INFO_1或pform as any就行了。
      

  2.   

    coldmoon:
         我按照你说的改了声明,但一运行程序就提示错误“vb.exe产生了错误,会被windows关闭。您需要重新启动程序“
         我调用的语句是r& = AddForm(hPtr&, 1, myform)
         这是怎么回事?
      

  3.   

    这样呢?
    r& = AddForm(hPtr&,ByVal 1, myform)
      

  4.   

    “vb.exe产生了错误,会被windows关闭。您需要重新启动程序“
    这个错误不是VB的问题,应该是DLL的问题。
    可能是参数错误或引用传值错误。
      

  5.   

    try it,i'm not quite sure 
    r = AddForm(ByVal hptr, ByVal 1, VarPtr(myform))
      

  6.   

    谢谢各位的回答
    我根据msdn的介绍 把FORM_INFO_1的定义增加了  Flags As Long 后,然后赋值 myform.Flags = FORM_USER 就不会出现错误了,但程序没有成功,没有添加成功新的格式,不知怎么办!应该是myform.Flags设置的不对 !!!