From: "david" <bsvj2421y19cbiun@jetable.org>
Subject: WIA
Date: 3 Jan 2006 02:50:09 -0800
Date: 2006-01-03T02:50:09-08:00 [thread overview]
Message-ID: <1136285409.869370.95610@f14g2000cwb.googlegroups.com> (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
next reply other threads:[~2006-01-03 10:50 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-03 10:50 david [this message]
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
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox