| /* |
| * Copyright 2008 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| |
| // JavaObject.h : Declaration of the CJavaObject |
| |
| #pragma once |
| #include "resource.h" // main symbols |
| #include "SessionData.h" |
| |
| #include "oophm_i.h" |
| |
| |
| #if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA) |
| #error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms." |
| #endif |
| |
| |
| |
| // CJavaObject |
| |
| class ATL_NO_VTABLE CJavaObject : |
| public CComObjectRootEx<CComSingleThreadModel>, |
| public CComCoClass<CJavaObject, &CLSID_JavaObject>, |
| public IDispatchImpl<IJavaObject, &IID_IJavaObject, &LIBID_oophmLib, /*wMajor =*/ 1, /*wMinor =*/ 0> |
| { |
| public: |
| // TODO How can the default constructor be gotten rid of? |
| CJavaObject() : objId(-1) { |
| } |
| |
| STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR* rgszNames, UINT cNames, |
| LCID lcid, DISPID* rgdispid); |
| |
| STDMETHOD(Invoke)(DISPID dispidMember, REFIID riid, |
| LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult, |
| EXCEPINFO* pexcepinfo, UINT* puArgErr); |
| |
| DECLARE_REGISTRY_RESOURCEID(IDR_JAVAOBJECT) |
| |
| |
| BEGIN_COM_MAP(CJavaObject) |
| COM_INTERFACE_ENTRY(IJavaObject) |
| COM_INTERFACE_ENTRY(IDispatchEx) |
| COM_INTERFACE_ENTRY(IDispatch) |
| END_COM_MAP() |
| |
| |
| |
| DECLARE_PROTECT_FINAL_CONSTRUCT() |
| |
| HRESULT FinalConstruct() |
| { |
| return S_OK; |
| } |
| |
| void FinalRelease() |
| { |
| Debug::log(Debug::Debugging) << "JavaObject " << objId << " released" << Debug::flush; |
| if (sessionData) { |
| // After shutdown, the session data will have been torn down |
| sessionData->freeJavaObject(objId); |
| } |
| } |
| |
| unsigned int getObjectId() const { |
| return objId; |
| } |
| |
| STDMETHOD(GetDispID)(BSTR,DWORD,DISPID *); |
| STDMETHOD(InvokeEx)(DISPID,LCID,WORD,DISPPARAMS *,VARIANT *,EXCEPINFO *,IServiceProvider *); |
| STDMETHOD(DeleteMemberByName)(BSTR,DWORD); |
| STDMETHOD(DeleteMemberByDispID)(DISPID); |
| STDMETHOD(GetMemberProperties)(DISPID,DWORD,DWORD *); |
| STDMETHOD(GetMemberName)(DISPID,BSTR *); |
| STDMETHOD(GetNextDispID)(DWORD,DISPID,DISPID *); |
| STDMETHOD(GetNameSpaceParent)(IUnknown **); |
| |
| void initialize(unsigned int objId, SessionDataRef sessionData) { |
| this->objId = objId; |
| this->sessionData = sessionData; |
| } |
| |
| void shutdown() { |
| sessionData = NULL; |
| } |
| |
| private: |
| unsigned int objId; |
| SessionDataRef sessionData; |
| }; |
| |
| OBJECT_ENTRY_AUTO(__uuidof(JavaObject), CJavaObject) |