summaryrefslogtreecommitdiff
path: root/src/mzcom/mzobj.h
blob: b0794f60b7538b4eec7a875a180230f9dee2cfa0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// MzObj.h : Declaration of the CMzObj

#ifndef __MZOBJ_H_
#define __MZOBJ_H_

#include "resource.h"       // main symbols

typedef struct {
  BSTR **ppInput;
  BSTR *pOutput;
  HRESULT *pHr;
  HANDLE readSem;
  HANDLE writeSem;
  HANDLE resetSem;
  HANDLE resetDoneSem;
  BOOL *pErrorState;
  BOOL *pResetFlag;
} THREAD_GLOBALS;

extern HINSTANCE globHinst;

/////////////////////////////////////////////////////////////////////////////
// CMzObj

#ifdef MZ_XFORM
START_XFORM_SKIP;
#endif

class CMzObj
{

  private:

    void *com_obj;

    HRESULT hr;
    HANDLE inputMutex;
    HANDLE readSem;
    HANDLE writeSem;
    HANDLE resetSem;
    HANDLE resetDoneSem;
    HANDLE evalDoneSems[2];
    BSTR *globInput;
    BSTR globOutput;
    HANDLE threadHandle;
    BOOL errorState;
    
    void RaiseError(const OLECHAR *);
    BOOL testThread(void);
    void startMzThread(void);
    void killMzThread(void);

  public:

    CMzObj(void* com_obj);
    ~CMzObj(void);

// IMzObj
public:
 HRESULT Reset(void);
 HRESULT About(void);
 HRESULT Eval(BSTR input,/*[out,retval]*/BSTR *output);
};

#ifdef MZ_XFORM
END_XFORM_SKIP;
#endif

#endif //__MZOBJ_H_