Trying to Interop a functionality from the Outside In API from Oracle.
Have the following function:
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:
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(LayoutKind.Sequential)]. Then instatiated an instance and generated the parameters by first creating a IntPtr with Marshal.AllocHGlobal(Marshal.SizeOf(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.
Jim
Jim JonesPosted Mar 19, 2010, 12:09 PM
The function shown is only one of many in the API. It does not compile. You surely must have seen errors from libraries/APIs/.libs/.dlls. Most of them have them and document them in a header file. This API has sccerr.h which is filled with several hundred. When I say the error is undefined, I mean that the function call from C# Interop returns 961, when I look for that number in the errors, I don't find it. Since it's being return from the dll, there isn't much I can do to figure out what it means.
In the past, working with this API I've gotten that code when my choice of parameters where incorrect. So looking for some insight into which parameters may be the problem.
Sam HobbsPosted Mar 16, 2010, 3:28 PM
I think you must define the undefined error. I don't know what is not defined and I doubt that anyone else does.
Thank you for all the details, but I think some of the most important details are not provided.