xref: /trunk/main/extensions/test/ole/unoTocomCalls/Test/Test.cpp (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 // Test.cpp : Defines the entry point for the console application.
28 //
29 
30 #include "stdafx.h"
31 #include "../XCallback_Impl/XCallback_Impl.h"
32 #include "../XCallback_Impl/XCallback_Impl_i.c"
33 
34 CComModule _Module;
35 BEGIN_OBJECT_MAP(ObjectMap)
36 END_OBJECT_MAP()
37 
38 HRESULT doTest();
39 
40 int main(int argc, char* argv[])
41 {
42     HRESULT hr;
43     if( FAILED( hr=CoInitialize(NULL)))
44     {
45         _tprintf(_T("CoInitialize failed \n"));
46         return -1;
47     }
48 
49 
50     _Module.Init( ObjectMap, GetModuleHandle( NULL));
51 
52     if( FAILED(hr=doTest()))
53     {
54         _com_error err( hr);
55         const TCHAR * errMsg= err.ErrorMessage();
56         MessageBox( NULL, errMsg, "Test failed", MB_ICONERROR);
57     }
58 
59 
60     _Module.Term();
61     CoUninitialize();
62 
63 
64     return 0;
65 }
66 
67 
68 HRESULT doTest()
69 {
70     HRESULT hr= S_OK;
71 
72     CComPtr<IUnknown> spUnk;
73     hr= spUnk.CoCreateInstance(L"com.sun.star.ServiceManager");
74     if( FAILED( hr))
75         return hr;
76 
77     CComDispatchDriver manager( spUnk);
78     CComVariant param( L"oletest.OleTest");
79     CComVariant retVal;
80     hr= manager.Invoke1((LPCOLESTR)L"createInstance", &param, &retVal );
81 
82     CComDispatchDriver oletest( retVal.punkVal);
83 
84     spUnk.Release();
85 
86     hr= spUnk.CoCreateInstance(L"XCallback_Impl.Callback");
87     if( FAILED( hr))
88         return hr;
89 
90     CComQIPtr<IDispatch> paramDisp(spUnk);
91 
92 
93     //######################################################################
94     //  out parameters
95     //######################################################################
96     CComVariant param1( paramDisp);
97     CComVariant param2(1);
98 
99     // oletest calls XCallback::func1
100     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
101     // XCallback::returnInterface
102     param2= 2;
103     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
104     // XCallback::outInterface
105     param2= 3;
106     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
107     // XCallback::outStruct
108     param2= 4;
109     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
110     // XCallback::outEnum
111     param2= 5;
112     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
113     // XCallback::outSeqAny
114     param2= 6;
115     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
116     // XCallback::outAny
117     param2= 7;
118     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
119     // XCallback::outBool
120     param2= 8;
121     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
122     // XCallback::outChar
123     param2= 9;
124     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
125     // XCallback::outString
126     param2= 10;
127     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
128     // XCallback::outFloat
129     param2= 11;
130     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
131     // XCallback::outDouble
132     param2= 12;
133     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
134     // XCallback::outByte
135     param2= 13;
136     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
137     // XCallback::outShort
138     param2= 14;
139     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
140     // XCallback::outLong
141     param2= 15;
142     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
143     // XCallback::outValuesMixed
144     param2= 30;
145     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
146     // XCallback::outValuesAll
147     param2= 31;
148     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
149 
150     // XCallback::outSeqByte
151     // Does not work currently because Sequences are always converted to
152     // SAFEARRAY( VARIANT)
153     //  param2= 32;
154     //  hr= oletest.Invoke2(L"testInterface", &param1, &param2);
155 
156     //######################################################################
157     //  in / out parameters
158     //######################################################################
159     // XCallback::inoutInterface
160     param2= 100;
161     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
162     // XCallback::inoutStruct
163     param2= 101;
164     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
165     // XCallback::inoutEnum
166     param2= 102;
167     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
168     // XCallback::inoutSeqAny
169     param2= 103;
170     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
171     // XCallback::inoutAny
172     param2= 104;
173     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
174     // XCallback::inoutBool
175     param2= 105;
176     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
177     // XCallback::inoutChar
178     param2= 106;
179     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
180     // XCallback::inoutString
181     param2= 107;
182     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
183     // XCallback::inoutFloat
184     param2= 108;
185     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
186     // XCallback::inoutDouble
187     param2= 109;
188     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
189     // XCallback::inoutByte
190     param2= 110;
191     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
192     // XCallback::inoutShort
193     param2= 111;
194     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
195     // XCallback::inoutLong
196     param2= 112;
197     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
198     // XCallback::inoutValuesAll
199     param2=120;
200     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
201     //######################################################################
202     //  in  parameters
203     //######################################################################
204     // XCallback::inValues
205     param2= 200;
206     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
207     // XCallback::inSeqByte
208     // SAFEARRAY( VARIANT)
209     param2= 201;
210     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
211     //XCallback::inSeqXEventListener
212     param2= 202;
213     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
214     //######################################################################
215     //  The UNO test component OleTest calls on XCallback_Impl.Callback directly
216     // that is the COM object has not been past a parameter but rather OleTest
217     // creates the COM object itself
218     //######################################################################
219     // XCallback::outValuesAll
220     // does not work currently
221     param2= 300;
222     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
223     // XCallback::inoutValuesAll
224     param2= 301;
225     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
226     // XCallback::inoutValues
227     param2= 302;
228     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
229 
230     // XCallback::inValues
231     param2= 303;
232     hr= oletest.Invoke2(L"testInterface", &param1, &param2);
233     //######################################################################
234     // Test a COM object which implements several interfaces.
235     //######################################################################
236 
237     CComQIPtr<IDispatch> dispSimple;
238     hr= dispSimple.CoCreateInstance(L"XCallback_Impl.Simple");
239     CComVariant varSimple( dispSimple);
240     param2= 0;
241     hr= oletest.Invoke2(L"testInterface2", &varSimple, &param2);
242 
243     return hr;
244 }
245 // VARIANT CComVariant VT_UNKNOWN VT_DISPATCH V_UI1 CComDispatchDriver WINAPI
246 
247