call "PC_PRINTER_INFO_DOTNET" using 
                                    by reference cblt-pi-printer-handle 
                                    by value cblt-printer-info-delegate 
                                    by value user-object 
                          returning status-code 
    end-call 
               	 | Using call prototype | Picture (32-bit systems) | Picture (64-bit systems) | |
|---|---|---|---|
| printer-handle | cblt-pi-printer-handle | pic x(4) comp-5 | pic x(8) comp-5 | 
| delegate | cblt-printer-info-delegate | see delegate-id above | see delegate-id above | 
| user-object | object | object | object | 
    delegate-id PrinterInfoDelegate. 
            procedure division using by value gr as type Graphics 
                                 by value pb as type Rectangle 
                                 by value ps as type PageSettings 
                                 by value uo as object 
                                . 
    end delegate.  
                     			 The following example shows how to use the PC_PRINTER_INFO_DOTNET API:
        $set iltarget"x86" 
        $set ilref"System.Drawing" 
        $set ilusing"System.Drawing". 
        $set ilusing"System.Drawing.Printing". 
 
        program-id. pcid. 
        special-names. 
            call-convention 74 is winapi. 
        working-storage section. 
        copy "cbltypes.cpy". 
        01. 
            03 document-title. 
            05 title-len         pic x(2) comp-5. 
            05 title-text        pic x(20). 
                03  font-family. 
            05 font-family-namelen  pic x(2) comp-5 value 80. 
            05 font-family-name     pic x(80). 
            03 abort               pic x(4) comp-5 value 1. 
            03 ctrl                pic x(4) comp-5 value 2. 
            03 flags               pic x(4) comp-5 value 1. 
            03 handle              pic x(4) comp-5. 
        01 status-code cblt-os-size value zeroes. 
 
        procedure division. 
            move 30 to title-len 
            move "PC_PRINTER_INFO_DOTNET Example" to title-text 
 
            call "PC_PRINTER_OPEN" using by reference handle 
                                            by reference document-title 
                                            by value flags 
                                            by value 0 
                                            returning status-code 
            end-call 
            if status-code not equal 0 
                exhibit named status-code 
                stop run 
            end-if 
 
            declare pinfo-delegate as type PrinterInfoDelegate 
            set pinfo-delegate to 
                delegate(gr as type Graphics, 
                        pb as type Rectangle, 
                        ps as type PageSettings 
                        uo as object ) 
 
                *> create an Eclipse the side of the page 
                    declare customColor = type Color::FromArgb(50, type Color::Blue) 
                    declare shadowBrush = new SolidBrush(customColor) 
 
                    invoke gr::FillEllipse(shadowBrush, pb) 
 
                    declare bigText as string = uo as string 
                    declare drawFormat = new StringFormat 
                    set drawFormat::Alignment to type StringAlignment::Center 
                    set drawFormat::LineAlignment to type StringAlignment::Center 
 
                    invoke gr::DrawString(bigText, new Font("Courier New", 24), new SolidBrush(type Color::Red), pb, drawFormat) 
 
                end-delegate 
 
            declare nullObject as object = null 
 
            call "PC_PRINTER_INFO_DOTNET" using 
                    by reference handle 
                    by value pinfo-delegate 
                    by value "Big Red text in the middle" 
                    returning status-code 
            end-call 
            if status-code not equal 0 
                exhibit named status-code 
            end-if 
 
            call "PC_PRINTER_CLOSE" using 
                by reference handle 
                returning status-code 
            end-call 
            if status-code not equal 0 
                exhibit named status-code 
                stop run 
            end-if 
            goback. 
        end program. 
 
        delegate-id PrinterInfoDelegate. 
            procedure division using by value gr as type Graphics 
                                    by value pb as type Rectangle 
                                    by value ps as type PageSettings 
                                    by value uo as object 
                                    . 
        end delegate.
 
               		The following example shows how to create an anonymous delegate (without specifying a name for the delegate) and then use it with the PC_PRINTER_INFO_DOTNET API:
        declare pinfo-delegate as type PrinterInfoDelegate 
        set pinfo-delegate to 
                delegate(gr as type Graphics, 
                        pb as type Rectangle, 
                        ps as type PageSettings 
                        uo as object) 
 
                    display "DpiX = " gr::DpiX 
                    display "DpiY = " gr::DpiY 
 
                    display "Page Boundary : " pb 
                    display "Page Settings : " ps 
               end-delegate 
 
               		You can use this delegate with the PC_PRINTER_INFO_DOTNET API as follows:
        call "PC_PRINTER_INFO_DOTNET" using 
                    by reference handle 
                    by value pinfo-delegate 
                    by value self  *> user-object is the program itself 
                                    *> so you can do a pinfo-delegate to the entry-point 
        end-call 
 
               	 
Accessing native resources:
The PC_PRINTER_INFO is unable to return the underlying Hdc attribute for a printer connection on the .NET platform as the attribute is only available during a page-event. You can use the PC_PRINTER_INFO_DOTNET API, however, to access the native Hdc for the printer.
In the delegate, you can use the GetHdc() and the ReleaseHdc() methods on the graphics object. For example:
declare dn-hdc = gr::GetHdc() try *> use the dn-hdc finally invoke gr::ReleaseHdc() end-try