Problem getting correct parameter types for interop call

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • jjones7947
    New Member
    • Nov 2008
    • 8

    Problem getting correct parameter types for interop call

    Trying to Interop a functionality from the Outside In API from Oracle.
    Have the following function:
    Code:
     SCCERR EXOpenExport {    VTHDOC    hDoc,    VTDWORD    dwOutputId,    VTDWORD    dwSpecType,    VTLPVOID    pSpec,    VTDWORD    dwFlags,    VTSYSPARAM    dwReserved,    VTLPVOID    pCallbackFunc,    VTSYSPARAM    dwCallbackData,    VTLPHEXPORT    phExport);
    From the header files I reduced the parameters to:
    Code:
    typedef VTSYSPARAM VTHDOC, VTLPHDOC *
    typedef DWORD_PTR VTSYSPARAM
    typedef unsigned long DWORD_PTR 
    
    typedef unsigned long VTDWORD 
    
    typedef VTVOID* VTLPVOID
    #define VTVOID void 
    
    typedef VTHDOC VTHEXPORT, *VTLPEXPORT 
    These are for 32 bit windows
    Going through the header files, the example programs, and the documentation I found:
    1. That pSpec could be a pointer to a buffer or NULL, so I set it to a IntPtr.Zero (documentation) .
    2. That dwFlags and dwReserved according to the documentation "Must be set by the developer to 0".
    3. That pCallbackFunc can be set to NULL if I don't want to handle callbacks.
    6. That the last two are based on structs that I wrote C# wrappers for using the [StructLayout(La youtKind.Sequen tial)]. Then instatiated an instance and generated the parameters by first creating a IntPtr with Marshal.AllocHG lobal(Marshal.S izeOf(instance) ), then getting the address value which is passed as a uint for dwCallbackData and a IntPtr for phExport.
    The final parameter list is as follows:
    phDoc as a IntPtr which was loaded with an address by the DAOpenDocument function called before
    dwOutputId as uint set to 1535 which represents FI_JPEGFIF
    dwSpecType as int set to 2 which represents IOTYPE_ANSIPATH
    pSpec as an IntPtr.Zero where the output will be written
    dwFlags as uint set to 0 as directed
    dwReserved as uint set to 0 as directed
    pCallbackFunc as IntPtr set to NULL as I will handle results
    dwCallBackDate as uint the address of a buffer for a struct
    phExport as IntPtr to another struct buffer

    still get an undefined error from the API. Meaning that the call returns a 961 which is not defined in any of the header files. In the past I have gotten this when my choice of parameter types are incorrect.
    Jim
Working...