ORA_FFI problem in Forms 4.5(win9x) with Crystal Reports

From: Sean McMurray <smcmurray_at_aoce.utah.edu>
Date: Tue, 12 Sep 2000 11:30:48 -0700
Message-ID: <39BE7658.BCEAFD54_at_aoce.utah.edu>


[Quoted] I am trying to lauch Crystal Reports 6 reports from Forms 4.5 using the crpe32.dll API.
I am able to load_library, and register three functions: PEOpenEngine, PEPrintReport, and PECloseEngine.

I can actually execute the PEOpenEngine and PECloseEngine without incident, but when I execute the PEPrintReport, I get an error. If anyone can set me straight, I'd be grateful.

Below is the API definition for PEPrintReport, and my package body.

short CRPE_API PEPrintReport (

    char FAR *reportFilePath,
    BOOL toDefaultPrinter,
    BOOL toWindow,
    char FAR *title,
    int left,
    int top,
    int width,
    int height,
    DWORD style,
    HWND parentWindow
);

PACKAGE BODY crys_rep IS

    lh_rep  ora_ffi.libHandleType;
    fh_openeng ora_ffi.funcHandleType;
    fh_pr  ora_ffi.funcHandleType;
    fh_closeeng ora_ffi.funcHandleType;

    CW_USEDEFAULT PLS_INTEGER DEFAULT -32768;     FUNCTION ff_OpenEng(ff_handle IN ORA_FFI.FUNCHANDLETYPE)

        RETURN PLS_INTEGER;
    PRAGMA interface(C, ff_OpenEng, 11265);

    FUNCTION ff_PEPrintReport(ff_handle IN ORA_FFI.FUNCHANDLETYPE, reportFilePath IN OUT VARCHAR2,

            toDefaultPrinter IN BINARY_INTEGER, toWindow IN BINARY_INTEGER,

            title IN VARCHAR2,
            left IN PLS_INTEGER, top IN PLS_INTEGER,
            width IN PLS_INTEGER, height IN PLS_INTEGER,
            style IN PLS_INTEGER, parentWindow IN PLS_INTEGER)
        RETURN PLS_INTEGER;

    PRAGMA interface(C, ff_PEPrintReport, 11265);

    FUNCTION ff_CloseEng(ff_handle IN ORA_FFI.FUNCHANDLETYPE)

        RETURN PLS_INTEGER;
    PRAGMA interface(C, ff_CloseEng, 11265);

    PROCEDURE PrintRep(filename IN OUT VARCHAR2) IS

        pr_res PLS_INTEGER;
    BEGIN

        if (ff_OpenEng(fh_openeng) =1 then
            pr_res:=ff_PEPrintReport(fh_pr, filename, 0, 1, 'Report
Results', CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL);
            message(to_char(ff_CloseEng(fh_closeeng)), ACKNOWLEDGE);
        end if;
    EXCEPTION
        WHEN OTHERS then
            message('Report Failed', ACKNOWLEDGE);
            message(to_char(ff_CloseEng(fh_closeeng)), ACKNOWLEDGE);
    END; BEGIN
    lh_rep := ora_ffi.load_library('c:\windows\system\', 'crpe32.dll');

    fh_openeng := ora_ffi.register_function(lh_rep,'PEOpenEngine', ora_ffi.PASCAL_STD);

    ora_ffi.register_return(fh_openeng, ORA_FFI.C_INT);

    fh_pr := ora_ffi.register_function(lh_rep,'PEPrintReport', ora_ffi.PASCAL_STD);

    ora_ffi.register_parameter(fh_pr, ORA_FFI.C_CHAR_PTR);
    ora_ffi.register_parameter(fh_pr, ORA_FFI.C_INT);
    ora_ffi.register_parameter(fh_pr, ORA_FFI.C_INT);
    ora_ffi.register_parameter(fh_pr, ORA_FFI.C_CHAR_PTR);
    ora_ffi.register_parameter(fh_pr, ORA_FFI.C_INT);
    ora_ffi.register_parameter(fh_pr, ORA_FFI.C_INT);
    ora_ffi.register_parameter(fh_pr, ORA_FFI.C_INT);
    ora_ffi.register_parameter(fh_pr, ORA_FFI.C_INT);
    ora_ffi.register_parameter(fh_pr, ORA_FFI.C_LONG);
    ora_ffi.register_parameter(fh_pr, ORA_FFI.C_INT);
    ora_ffi.register_return(fh_pr, ORA_FFI.C_INT);

    fh_closeeng := ora_ffi.register_function(lh_rep,'PECloseEngine', ora_ffi.PASCAL_STD);

    ora_ffi.register_return(fh_closeeng, ORA_FFI.C_VOID_PTR); END;

--

Sean McMurray
Received on Tue Sep 12 2000 - 20:30:48 CEST

Original text of this message