ORA_FFI problem in Forms 4.5(win9x) with Crystal Reports
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, 'ReportResults', 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 McMurrayReceived on Tue Sep 12 2000 - 20:30:48 CEST