1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef __JSCRIPTCLASSES_HXX
24 #define __JSCRIPTCLASSES_HXX
25 
26 
27 #pragma warning (push,1)
28 #pragma warning (disable:4548)
29 
30 #include <tools/presys.h>
31 //#include "stdafx.h"
32 #define STRICT
33 #define _WIN32_WINNT 0x0400
34 #define _WIN32_DCOM
35 #if OSL_DEBUG_LEVEL > 0
36 //#define _ATL_DEBUG_INTERFACES
37 #endif
38 #include <atlbase.h>
39 extern CComModule _Module;
40 #include <atlcom.h>
41 #include <tools/postsys.h>
42 
43 #pragma warning (pop)
44 #pragma warning (disable:4505)
45     // disable "unreferenced local function has been removed" globally
46 
47 #include "comifaces.hxx"
48 
49 
50 
51 // Sequences are represented by prepending "[]", e.g. []char, [][]byte, [][][]object, etc.
52 
53 // To make a JScriptValue object to an out parameter, call
54 // "InitOutParam" and to make it a in/out parameter call
55 // "InitInOutParam"
56 
57 // If the object represents an out parameter then the value can after the call
58 // be retrieved by "Get".
59 
60 // From JavaScript the functions Get, Set, InitOutParam and InitInOutParam are
61 // used, that is they are accessible through IDispatch. The functions are used
62 // by the bridge.
63 
64 class JScriptValue:
65 	  public CComObjectRootEx<CComMultiThreadModel>,
66 	  public IJScriptValueObject,
67 	  public IDispatch
68 {
69 public:
70 	JScriptValue();
71 	virtual ~JScriptValue();
72 
73 	BEGIN_COM_MAP(JScriptValue)
74 		COM_INTERFACE_ENTRY(IDispatch)
75 		COM_INTERFACE_ENTRY(IJScriptValueObject)
76 	END_COM_MAP()
77 
78 	// IDispatch -------------------------------------------
79 	STDMETHOD( GetTypeInfoCount)(UINT *pctinfo);
80 
81 	STDMETHOD( GetTypeInfo)( UINT iTInfo,
82 							 LCID lcid,
83 							 ITypeInfo **ppTInfo);
84 
85 	STDMETHOD( GetIDsOfNames)( REFIID riid,
86 							   LPOLESTR *rgszNames,
87 							   UINT cNames,
88 							   LCID lcid,
89 							   DISPID *rgDispId);
90 
91 	STDMETHOD( Invoke)( DISPID dispIdMember,
92 						REFIID riid,
93 						LCID lcid,
94 						WORD wFlags,
95 						DISPPARAMS *pDispParams,
96 						VARIANT *pVarResult,
97 						EXCEPINFO *pExcepInfo,
98 						UINT *puArgErr);
99 	// IJScriptOutParam --------------------------------------
100 
101 	STDMETHOD( Set)( VARIANT type, VARIANT value);
102 	STDMETHOD( Get)( VARIANT *val);
103 	STDMETHOD( InitOutParam)();
104 	STDMETHOD( InitInOutParam)( VARIANT type, VARIANT value);
105 	STDMETHOD( IsOutParam)( VARIANT_BOOL * flag);
106 	STDMETHOD( IsInOutParam)( VARIANT_BOOL * flag);
107 	STDMETHOD( GetValue)( BSTR* type, VARIANT *value);
108 
109 
110 	CComVariant m_varValue;
111 	CComBSTR m_bstrType;
112 	unsigned m_bOutParam: 1;
113 	unsigned m_bInOutParam: 1;
114 
115 };
116 
117 // If a class is implemented in JScript, then its method
118 class JScriptOutParam:
119 	  public CComObjectRootEx<CComMultiThreadModel>,
120 	  public IDispatch
121 {
122 public:
123 	JScriptOutParam();
124 	virtual ~JScriptOutParam();
125 
126 	BEGIN_COM_MAP(JScriptOutParam)
127 		COM_INTERFACE_ENTRY(IDispatch)
128 	END_COM_MAP()
129 
130 	// IDispatch -------------------------------------------
131 	STDMETHOD( GetTypeInfoCount)(UINT *pctinfo);
132 
133 	STDMETHOD( GetTypeInfo)( UINT iTInfo,
134 							 LCID lcid,
135 							 ITypeInfo **ppTInfo);
136 
137 	STDMETHOD( GetIDsOfNames)( REFIID riid,
138 							   LPOLESTR *rgszNames,
139 							   UINT cNames,
140 							   LCID lcid,
141 							   DISPID *rgDispId);
142 
143 	STDMETHOD( Invoke)( DISPID dispIdMember,
144 						REFIID riid,
145 						LCID lcid,
146 						WORD wFlags,
147 						DISPPARAMS *pDispParams,
148 						VARIANT *pVarResult,
149 						EXCEPINFO *pExcepInfo,
150 						UINT *puArgErr);
151 
152 
153 private:
154 	CComVariant m_varValue;
155 };
156 
157 #endif
158