We have a data load program written in Oracle Reports 2.5 (yes, I know, it
wasn't me!). This uses ORA_FFI to interface with a .dll to validate and
reformat addresses. I would like to perform the same interface in PHP if
possible, without needing to do any development work on or around the .dll.
Can anyone point me in the right direction?

Some sample code below. The key points are, I think.
1. Oracle seems to be able, using Ora_FFI, to directly access a function in
a .dll, passing it parameters, and receiving its return output.
2. In the package initialization, at the end of the page, the .dll
'TBIF100.dll', referrred to as a library, is first loaded and opened, and
then the function 'PAS988V659' within the library is registered along with
its in/out parameters.
3. As a result of this, the dll and the function are assigned handles. The
function handle is used in the function i_obm988 to actually execute the
function.It's a rather strange looking bit of PL/SQL but it works!

PACKAGE BODY call_cbm988_pas IS
     lh_obm988 ora_ffi.libHandleType;
     fh_obm988 ora_ffi.funcHandleType;

   FUNCTION i_obm988(
    funcHandle IN ora_ffi.funcHandleType
   ,cons_name      IN OUT VARCHAR2
   -- other parameters
   )
   RETURN PLS_INTEGER;
   PRAGMA INTERFACE(C,i_obm988,11265);

BEGIN -- Package Initialization
     BEGIN
     lh_obm988 := ora_ffi.find_library('TBIF100.dll');
     EXCEPTION WHEN ora_ffi.FFI_ERROR THEN
     lh_obm988 := ora_ffi.load_library(NULL,'TBIF100.dll');
     END ;
     fh_obm988 :=
ora_ffi.register_function(lh_obm988,'PAS988V659',ora_ffi.PASCAL_STD);
     ora_ffi.register_parameter(fh_obm988,ORA_FFI.C_CHAR_PTR);
     ora_ffi.register_parameter(fh_obm988,ORA_FFI.C_CHAR_PTR);
     -- register other parameters
END call_cbm988_pas;

Thanks

Euan



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to