Re: This does not work on XP Attn: Larry Miller

new topic     » topic index » view thread      » older message » newer message

Hi Larry

 I tried your fix and got an error C:\Euphoria\defaultprintername.exw:14
define_c_func takes 4 arguments
        {C_POINTER,C_LONG})

I wrote a small program to test this function as follows.
Any help is greatly appreciated.

include dll.e
include machine.e

constant winspool = open_dll("winspool.drv")

constant iEnumPrinters = define_c_func(winspool,"EnumPrintersA",{C_INT,C_INT,C_INT, C_INT,C_INT,C_INT,C_INT},C_INT) constant PRINTER_ENUM_DEFAULT = 1

Add this declaration constant iGetDefaultPrinter=define_c_func(winspool,"GetDefaultPrinterA", {C_POINTER,C_LONG})

with trace


function peeksz(atom pStr) peek string zero

return from allocated memory a string terminated by sero integer c,i sequence str

str = {} i = 1 c = peek(pStr) while c do str = str & c c = peek(pStr+i) i = i + 1 end while return str end function


global function DefaultPrinterName() return default printer name atom pPInfo5, pNeeded, pReturned, ok, needed sequence PrinterName

--Add This atom pBuffer pBuffer=allocate(40) if iGetDefaultPrinter>0 then OS is Win2000 or XP ok=c_func(iGetDefaultPrinter,{pBuffer,40}) if ok then PrinterName=peeksz(pBuffer) else PrinterName="" end if free(pBuffer) return PrinterName end if --End Additions

pNeeded = allocate(4) mem_set(pNeeded,0,4) pReturned = allocate(4) mem_set(pReturned,0,4) first try to know how many bytes needed for pPInfo5 ok = c_func(iEnumPrinters,{PRINTER_ENUM_DEFAULT,NULL,5,0,0,pNeeded,pReturned}) needed = peek4u(pNeeded) pPInfo5 = allocate(needed) mem_set(pPInfo5,0,needed) ok = c_func(iEnumPrinters,{PRINTER_ENUM_DEFAULT,NULL,5,pPInfo5,needed, pNeeded,pReturned}) free(pNeeded) free(pReturned) if not ok then free(pPInfo5) return {} else PrinterName = peeksz(peek4u(pPInfo5)) free(pPInfo5) return PrinterName end if end function

trace(1) object temp

temp = DefaultPrinterName()

integer k printf(1,"%s",{temp})

while 1 do k = get_key() if k != -1 then exit end if end while

- Thanks Rod Damon }}}

new topic     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu