comp.lang.ada
 help / color / mirror / Atom feed
* WIA
@ 2006-01-03 10:50 david
  2006-01-03 11:36 ` WIA Stephen Leake
  2006-01-03 14:04 ` WIA Frank J. Lhota
  0 siblings, 2 replies; 5+ messages in thread
From: david @ 2006-01-03 10:50 UTC (permalink / raw)


Hello,

I'm trying to use wia in an ADA software.

I have found little code samples to write com objects and this seems to
work well.

My problem is to use  (Wia_Property_Storage_Interface.Lpvtbl.)
Writemultiple : i'm not sure about interfacing the two types propspec
and propvariant and the writemultiple call.
In C, writemultiple is :

HRESULT WriteMultiple(
  ULONG cpspec,
  const PROPSPEC rgpspec[],
  const PROPVARIANT rgpropvar[],
  PROPID propidNameFirst
);

I'm not sure about the ada corresponding specifications for the "const
type var[]".
I wrote :

   type Propspec (Kind : Win32.Ulong) is
      record
         case Kind is
            when Prspec_Propid =>
               Propid : Win32.Oleauto.Propid;
            when Prspec_Lpwstr =>
               Lpwstr : Win32.Objbase.Lpolestr;
            when others =>
               null;
         end case;
      end record;
   pragma Convention (C, Propspec);
   type Ppropspec is access all Propspec;
   function To_Ppropspec is new Ada.Unchecked_Conversion
(System.Address, Ppropspec);

   type Tab_Propspec_Propid is array (Positive range <>) of Propspec
(Prspec_Propid);

      type Propvariant (Vt : Win32.Oleauto.Varenum) is
      record
         Wreserved1 : Win32.Word;
         Wreserved2 : Win32.Word;
         Wreserved3 : Win32.Word;
         case Vt is
            when Win32.Oleauto.Vt_I4 =>
               Ival : Win32.Long;
            when Win32.Oleauto.Vt_Bstr =>
               Bstrval : Win32.Oleauto.Bstr;
            when others =>
               null;
         end case;
      end record;
   pragma Convention (C, Propvariant);
   type Ppropvariant is access all Propvariant;
   function To_Ppropvar is new Ada.Unchecked_Conversion
(System.Address, Ppropvariant);

   type Tab_Propvariant_Vt_I4 is array (Positive range <>) of
Propvariant (Win32.Oleauto.Vt_I4);

   type Af_I_Wia_Property_Storage_Writemultiple is access
     function (This      : access I_Wia_Property_Storage;
               Cpspec    : Win32.Ulong; -- in
               Rgpspec   : Ppropspec;-- in const propspec []
               Rgpropvar : Ppropvariant;-- in const propvariant []
               Propidnamefirst : Win32.Oleauto.Propid) -- in essayer
avec 2
       return Win32.Objbase.HRESULT;
   pragma Convention (Stdcall,
Af_I_Wia_Property_Storage_Writemultiple);

When calling this method, I write :

Propspec_Flash_Mode   : Tab_Propspec_Propid (1 .. 1) := (1 => (Kind =>
Prspec_Propid,

Propid => Win32.Oleauto.Propid (Wia_Dpc_Flash_Mode)));
Propvar_Flash_Fill   : Tab_Propvariant_Vt_I4 (1 .. 1) := (1 =>
(Win32.Oleauto.Vt_I4,

Win32.Word (0),

Win32.Word (0),

Win32.Word (0),

Win32.Long (Wia_Flash_Mode_Fill)));


My_Hresult := Wia_Property_Storage_Interface.Lpvtbl.Writemultiple
(Wia_Property_Storage_Interface,

    1,

    To_Ppropspec (Propspec_Flash_Mode (1)'Address),

    To_Ppropvar (Propvar_Flash_Fill (1)'Address),

    2);

I tried to work without tab_prospec_propid and tab_propvariant_vt_i4
but this doesn't work.
When executing, my_hresult is s_false.

I tried to use gnatcom to verify my interfacing but createcom seems to
not work on wiaservc.dll (whereas it works on wiaaut.dll for example.

So, I have 2 questions :

Is someone see a mistake on my interface code ?
Does someone know why gnatcom doesn't work on wiaservc.dll ?

thank you very much and.....

best wishes for 2006

David




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2006-01-03 14:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-01-03 10:50 WIA david
2006-01-03 11:36 ` WIA Stephen Leake
2006-01-03 12:54   ` WIA david
2006-01-03 14:04 ` WIA Frank J. Lhota
2006-01-03 14:22   ` WIA david

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox