119 lines
3.2 KiB
C++
Executable File
119 lines
3.2 KiB
C++
Executable File
/*
|
|
* OLEAutomation.h - OLE Automation services for MAXScript
|
|
*
|
|
* Copyright © John Wainwright 1996
|
|
*
|
|
*/
|
|
|
|
#ifndef _H_MAX_OLE_AUTOMATION
|
|
#define _H_MAX_OLE_AUTOMATION
|
|
|
|
#include "Arrays.h"
|
|
#include "classIDs.h"
|
|
#include "Funcs.h"
|
|
|
|
/* error scodes */
|
|
|
|
#define MS_E_EXCEPTION MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0200)
|
|
#define MS_E_ILLEGAL_RETURN_VALUE MS_E_EXCEPTION + 0x001
|
|
|
|
/* ------- the MAXScript OLE object class factory ---------- */
|
|
|
|
class MSClassFactory : public IClassFactory
|
|
{
|
|
public:
|
|
static IClassFactory* Create();
|
|
|
|
/* IUnknown methods */
|
|
STDMETHOD(QueryInterface)(REFIID iid, void** ppv);
|
|
STDMETHOD_(unsigned long, AddRef)(void);
|
|
STDMETHOD_(unsigned long, Release)(void);
|
|
|
|
/* IClassFactory methods */
|
|
STDMETHOD(CreateInstance)(IUnknown* pUnkOuter, REFIID iid, void** ppv);
|
|
STDMETHOD(LockServer)(BOOL fLock);
|
|
|
|
private:
|
|
MSClassFactory();
|
|
|
|
unsigned long m_refs;
|
|
};
|
|
|
|
/* ---------- the MAXScript OLE object class -------------- */
|
|
|
|
class MSOLEObject : public IDispatch
|
|
{
|
|
public:
|
|
static MSOLEObject* Create();
|
|
|
|
/* IUnknown methods */
|
|
STDMETHOD(QueryInterface)(REFIID riid, void** ppvObj);
|
|
STDMETHOD_(unsigned long, AddRef)(void);
|
|
STDMETHOD_(unsigned long, Release)(void);
|
|
|
|
/* IDispatch methods */
|
|
STDMETHOD(GetTypeInfoCount)(unsigned int* pcTypeInfo);
|
|
STDMETHOD(GetTypeInfo)(unsigned int iTypeInfo, LCID lcid, ITypeInfo** ppTypeInfo);
|
|
STDMETHOD(GetIDsOfNames)(REFIID riid, OLECHAR** rgszNames, unsigned int cNames, LCID lcid, DISPID* rgdispid);
|
|
STDMETHOD(Invoke)(DISPID dispidMember, REFIID riid, LCID lcid, unsigned short wFlags,
|
|
DISPPARAMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexcepinfo, unsigned int* puArgErr);
|
|
|
|
/* MSOLEObject stuff */
|
|
|
|
unsigned long m_refs;
|
|
static Array* exposed_fns; // array of exposed MAXScript functions, DISPID is 1-based index in array
|
|
|
|
MSOLEObject();
|
|
|
|
static void install_fns(Array* fns);
|
|
};
|
|
|
|
/* ---------------- client-side classes -------------------- */
|
|
|
|
visible_class (OLEObject)
|
|
|
|
class OLEObject : public Value
|
|
{
|
|
public:
|
|
Value* progID; // user-supplied progID string
|
|
CLSID clsid; // CLSID of ActiveX object.
|
|
LPDISPATCH pdisp; // IDispatch of ActiveX object.
|
|
|
|
OLEObject(Value* progID, CLSID cslid, LPDISPATCH pdisp);
|
|
OLEObject(Value* progID, LPDISPATCH pdisp);
|
|
~OLEObject();
|
|
|
|
classof_methods (OLEObject, Value);
|
|
void collect() { delete this; }
|
|
void gc_trace();
|
|
ScripterExport void sprin1(CharStream* s);
|
|
|
|
Value* get_property(Value** arg_list, int count);
|
|
Value* set_property(Value** arg_list, int count);
|
|
Value* get_fn_property(Value* prop);
|
|
};
|
|
|
|
visible_class (OLEMethod)
|
|
|
|
class OLEMethod : public Function
|
|
{
|
|
public:
|
|
OLEObject* ole_obj; // my OLE object
|
|
DISPID dispid; // method dispatch ID
|
|
|
|
OLEMethod() { }
|
|
OLEMethod(TCHAR* name, OLEObject* ole_obj, DISPID mth_id);
|
|
|
|
classof_methods (OLEMethod, Function);
|
|
void collect() { delete this; }
|
|
void gc_trace();
|
|
|
|
Value* apply(Value** arglist, int count, CallContext* cc=NULL);
|
|
};
|
|
|
|
BOOL init_MAXScript_OLE();
|
|
void uninit_OLE();
|
|
|
|
#define UNUSED(X) (X)
|
|
|
|
#endif |