1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski // Test.cpp : Defines the entry point for the console application.
24*b1cdbd2cSJim Jagielski //
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielski #include "stdafx.h"
27*b1cdbd2cSJim Jagielski #include "../XCallback_Impl/XCallback_Impl.h"
28*b1cdbd2cSJim Jagielski #include "../XCallback_Impl/XCallback_Impl_i.c"
29*b1cdbd2cSJim Jagielski
30*b1cdbd2cSJim Jagielski CComModule _Module;
31*b1cdbd2cSJim Jagielski BEGIN_OBJECT_MAP(ObjectMap)
32*b1cdbd2cSJim Jagielski END_OBJECT_MAP()
33*b1cdbd2cSJim Jagielski
34*b1cdbd2cSJim Jagielski HRESULT doTest();
35*b1cdbd2cSJim Jagielski
main(int argc,char * argv[])36*b1cdbd2cSJim Jagielski int main(int argc, char* argv[])
37*b1cdbd2cSJim Jagielski {
38*b1cdbd2cSJim Jagielski HRESULT hr;
39*b1cdbd2cSJim Jagielski if( FAILED( hr=CoInitialize(NULL)))
40*b1cdbd2cSJim Jagielski {
41*b1cdbd2cSJim Jagielski _tprintf(_T("CoInitialize failed \n"));
42*b1cdbd2cSJim Jagielski return -1;
43*b1cdbd2cSJim Jagielski }
44*b1cdbd2cSJim Jagielski
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski _Module.Init( ObjectMap, GetModuleHandle( NULL));
47*b1cdbd2cSJim Jagielski
48*b1cdbd2cSJim Jagielski if( FAILED(hr=doTest()))
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski _com_error err( hr);
51*b1cdbd2cSJim Jagielski const TCHAR * errMsg= err.ErrorMessage();
52*b1cdbd2cSJim Jagielski MessageBox( NULL, errMsg, "Test failed", MB_ICONERROR);
53*b1cdbd2cSJim Jagielski }
54*b1cdbd2cSJim Jagielski
55*b1cdbd2cSJim Jagielski
56*b1cdbd2cSJim Jagielski _Module.Term();
57*b1cdbd2cSJim Jagielski CoUninitialize();
58*b1cdbd2cSJim Jagielski
59*b1cdbd2cSJim Jagielski
60*b1cdbd2cSJim Jagielski return 0;
61*b1cdbd2cSJim Jagielski }
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski
doTest()64*b1cdbd2cSJim Jagielski HRESULT doTest()
65*b1cdbd2cSJim Jagielski {
66*b1cdbd2cSJim Jagielski HRESULT hr= S_OK;
67*b1cdbd2cSJim Jagielski
68*b1cdbd2cSJim Jagielski CComPtr<IUnknown> spUnk;
69*b1cdbd2cSJim Jagielski hr= spUnk.CoCreateInstance(L"com.sun.star.ServiceManager");
70*b1cdbd2cSJim Jagielski if( FAILED( hr))
71*b1cdbd2cSJim Jagielski return hr;
72*b1cdbd2cSJim Jagielski
73*b1cdbd2cSJim Jagielski CComDispatchDriver manager( spUnk);
74*b1cdbd2cSJim Jagielski CComVariant param( L"oletest.OleTest");
75*b1cdbd2cSJim Jagielski CComVariant retVal;
76*b1cdbd2cSJim Jagielski hr= manager.Invoke1((LPCOLESTR)L"createInstance", ¶m, &retVal );
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielski CComDispatchDriver oletest( retVal.punkVal);
79*b1cdbd2cSJim Jagielski
80*b1cdbd2cSJim Jagielski spUnk.Release();
81*b1cdbd2cSJim Jagielski
82*b1cdbd2cSJim Jagielski hr= spUnk.CoCreateInstance(L"XCallback_Impl.Callback");
83*b1cdbd2cSJim Jagielski if( FAILED( hr))
84*b1cdbd2cSJim Jagielski return hr;
85*b1cdbd2cSJim Jagielski
86*b1cdbd2cSJim Jagielski CComQIPtr<IDispatch> paramDisp(spUnk);
87*b1cdbd2cSJim Jagielski
88*b1cdbd2cSJim Jagielski
89*b1cdbd2cSJim Jagielski //######################################################################
90*b1cdbd2cSJim Jagielski // out parameters
91*b1cdbd2cSJim Jagielski //######################################################################
92*b1cdbd2cSJim Jagielski CComVariant param1( paramDisp);
93*b1cdbd2cSJim Jagielski CComVariant param2(1);
94*b1cdbd2cSJim Jagielski
95*b1cdbd2cSJim Jagielski // oletest calls XCallback::func1
96*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
97*b1cdbd2cSJim Jagielski // XCallback::returnInterface
98*b1cdbd2cSJim Jagielski param2= 2;
99*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
100*b1cdbd2cSJim Jagielski // XCallback::outInterface
101*b1cdbd2cSJim Jagielski param2= 3;
102*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
103*b1cdbd2cSJim Jagielski // XCallback::outStruct
104*b1cdbd2cSJim Jagielski param2= 4;
105*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
106*b1cdbd2cSJim Jagielski // XCallback::outEnum
107*b1cdbd2cSJim Jagielski param2= 5;
108*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
109*b1cdbd2cSJim Jagielski // XCallback::outSeqAny
110*b1cdbd2cSJim Jagielski param2= 6;
111*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
112*b1cdbd2cSJim Jagielski // XCallback::outAny
113*b1cdbd2cSJim Jagielski param2= 7;
114*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
115*b1cdbd2cSJim Jagielski // XCallback::outBool
116*b1cdbd2cSJim Jagielski param2= 8;
117*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
118*b1cdbd2cSJim Jagielski // XCallback::outChar
119*b1cdbd2cSJim Jagielski param2= 9;
120*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
121*b1cdbd2cSJim Jagielski // XCallback::outString
122*b1cdbd2cSJim Jagielski param2= 10;
123*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
124*b1cdbd2cSJim Jagielski // XCallback::outFloat
125*b1cdbd2cSJim Jagielski param2= 11;
126*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
127*b1cdbd2cSJim Jagielski // XCallback::outDouble
128*b1cdbd2cSJim Jagielski param2= 12;
129*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
130*b1cdbd2cSJim Jagielski // XCallback::outByte
131*b1cdbd2cSJim Jagielski param2= 13;
132*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
133*b1cdbd2cSJim Jagielski // XCallback::outShort
134*b1cdbd2cSJim Jagielski param2= 14;
135*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
136*b1cdbd2cSJim Jagielski // XCallback::outLong
137*b1cdbd2cSJim Jagielski param2= 15;
138*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
139*b1cdbd2cSJim Jagielski // XCallback::outValuesMixed
140*b1cdbd2cSJim Jagielski param2= 30;
141*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
142*b1cdbd2cSJim Jagielski // XCallback::outValuesAll
143*b1cdbd2cSJim Jagielski param2= 31;
144*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
145*b1cdbd2cSJim Jagielski
146*b1cdbd2cSJim Jagielski // XCallback::outSeqByte
147*b1cdbd2cSJim Jagielski // Does not work currently because Sequences are always converted to
148*b1cdbd2cSJim Jagielski // SAFEARRAY( VARIANT)
149*b1cdbd2cSJim Jagielski // param2= 32;
150*b1cdbd2cSJim Jagielski // hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
151*b1cdbd2cSJim Jagielski
152*b1cdbd2cSJim Jagielski //######################################################################
153*b1cdbd2cSJim Jagielski // in / out parameters
154*b1cdbd2cSJim Jagielski //######################################################################
155*b1cdbd2cSJim Jagielski // XCallback::inoutInterface
156*b1cdbd2cSJim Jagielski param2= 100;
157*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
158*b1cdbd2cSJim Jagielski // XCallback::inoutStruct
159*b1cdbd2cSJim Jagielski param2= 101;
160*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
161*b1cdbd2cSJim Jagielski // XCallback::inoutEnum
162*b1cdbd2cSJim Jagielski param2= 102;
163*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
164*b1cdbd2cSJim Jagielski // XCallback::inoutSeqAny
165*b1cdbd2cSJim Jagielski param2= 103;
166*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
167*b1cdbd2cSJim Jagielski // XCallback::inoutAny
168*b1cdbd2cSJim Jagielski param2= 104;
169*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
170*b1cdbd2cSJim Jagielski // XCallback::inoutBool
171*b1cdbd2cSJim Jagielski param2= 105;
172*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
173*b1cdbd2cSJim Jagielski // XCallback::inoutChar
174*b1cdbd2cSJim Jagielski param2= 106;
175*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
176*b1cdbd2cSJim Jagielski // XCallback::inoutString
177*b1cdbd2cSJim Jagielski param2= 107;
178*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
179*b1cdbd2cSJim Jagielski // XCallback::inoutFloat
180*b1cdbd2cSJim Jagielski param2= 108;
181*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
182*b1cdbd2cSJim Jagielski // XCallback::inoutDouble
183*b1cdbd2cSJim Jagielski param2= 109;
184*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
185*b1cdbd2cSJim Jagielski // XCallback::inoutByte
186*b1cdbd2cSJim Jagielski param2= 110;
187*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
188*b1cdbd2cSJim Jagielski // XCallback::inoutShort
189*b1cdbd2cSJim Jagielski param2= 111;
190*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
191*b1cdbd2cSJim Jagielski // XCallback::inoutLong
192*b1cdbd2cSJim Jagielski param2= 112;
193*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
194*b1cdbd2cSJim Jagielski // XCallback::inoutValuesAll
195*b1cdbd2cSJim Jagielski param2=120;
196*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
197*b1cdbd2cSJim Jagielski //######################################################################
198*b1cdbd2cSJim Jagielski // in parameters
199*b1cdbd2cSJim Jagielski //######################################################################
200*b1cdbd2cSJim Jagielski // XCallback::inValues
201*b1cdbd2cSJim Jagielski param2= 200;
202*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
203*b1cdbd2cSJim Jagielski // XCallback::inSeqByte
204*b1cdbd2cSJim Jagielski // SAFEARRAY( VARIANT)
205*b1cdbd2cSJim Jagielski param2= 201;
206*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
207*b1cdbd2cSJim Jagielski //XCallback::inSeqXEventListener
208*b1cdbd2cSJim Jagielski param2= 202;
209*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
210*b1cdbd2cSJim Jagielski //######################################################################
211*b1cdbd2cSJim Jagielski // The UNO test component OleTest calls on XCallback_Impl.Callback directly
212*b1cdbd2cSJim Jagielski // that is the COM object has not been past a parameter but rather OleTest
213*b1cdbd2cSJim Jagielski // creates the COM object itself
214*b1cdbd2cSJim Jagielski //######################################################################
215*b1cdbd2cSJim Jagielski // XCallback::outValuesAll
216*b1cdbd2cSJim Jagielski // does not work currently
217*b1cdbd2cSJim Jagielski param2= 300;
218*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
219*b1cdbd2cSJim Jagielski // XCallback::inoutValuesAll
220*b1cdbd2cSJim Jagielski param2= 301;
221*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
222*b1cdbd2cSJim Jagielski // XCallback::inoutValues
223*b1cdbd2cSJim Jagielski param2= 302;
224*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
225*b1cdbd2cSJim Jagielski
226*b1cdbd2cSJim Jagielski // XCallback::inValues
227*b1cdbd2cSJim Jagielski param2= 303;
228*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface", ¶m1, ¶m2);
229*b1cdbd2cSJim Jagielski //######################################################################
230*b1cdbd2cSJim Jagielski // Test a COM object which implements several interfaces.
231*b1cdbd2cSJim Jagielski //######################################################################
232*b1cdbd2cSJim Jagielski
233*b1cdbd2cSJim Jagielski CComQIPtr<IDispatch> dispSimple;
234*b1cdbd2cSJim Jagielski hr= dispSimple.CoCreateInstance(L"XCallback_Impl.Simple");
235*b1cdbd2cSJim Jagielski CComVariant varSimple( dispSimple);
236*b1cdbd2cSJim Jagielski param2= 0;
237*b1cdbd2cSJim Jagielski hr= oletest.Invoke2(L"testInterface2", &varSimple, ¶m2);
238*b1cdbd2cSJim Jagielski
239*b1cdbd2cSJim Jagielski return hr;
240*b1cdbd2cSJim Jagielski }
241*b1cdbd2cSJim Jagielski // VARIANT CComVariant VT_UNKNOWN VT_DISPATCH V_UI1 CComDispatchDriver WINAPI
242*b1cdbd2cSJim Jagielski
243