1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
(* A simple client in Caml *)
open Printf
let testcomp clsid =
print_string "Call Com.create_instance to create component and get interface IX"; print_newline();
begin try
let ix = Com.create_instance clsid Component.iid_iX in
print_string "Calling Fx..."; print_newline();
(Component.use_iX ix)#fx;
begin try
print_string "Ask for interface IY"; print_newline();
let iy = Com.query_interface ix Component.iid_iY in
print_string "Got it, calling Fy(5)..."; print_newline();
(Component.use_iY iy)#fy 5
with Com.Error(_, src, msg) ->
printf "COM error (%s): %s\n" src msg; flush stdout
end;
begin try
print_string "Ask for interface IZ"; print_newline();
let iz = Com.query_interface ix Component.iid_iZ in
print_string "Got it, calling Fz(12)..."; print_newline();
let res = (Component.use_iZ iz)#fz 12 in
printf "Return value is %d\n" res; flush stdout
with Com.Error(_, src, msg) ->
printf "COM error (%s): %s\n" src msg; flush stdout
end
with Com.Error(_, src, msg) ->
printf "COM error (%s): %s\n" src msg; flush stdout
end
let clsid_component1 = Com.clsid "0c092c21-882c-11cf-a6bb-0080c7b2d682"
let clsid_component2 = Com.clsid "aab56090-c721-11d2-8e2b-0060974fbf19"
let _ =
Com.initialize();
testcomp clsid_component1;
testcomp clsid_component2;
Com.uninitialize()
|