forked from yrm006/openvbs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGUI.cpp
More file actions
82 lines (60 loc) · 2.01 KB
/
Copy pathGUI.cpp
File metadata and controls
82 lines (60 loc) · 2.01 KB
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
71
72
73
74
75
76
77
78
79
#include "npole.h"
class GUI : public IDispatch{
private:
ULONG m_refc = 1;
public:
// GUI(){wprintf(L"%s\n", __FUNCTIONW__);}
// ~GUI(){wprintf(L"%s\n", __FUNCTIONW__);}
HRESULT QueryInterface(REFIID riid, void** ppvObject){ return E_NOTIMPL; }
ULONG AddRef(){ return ++m_refc; }
ULONG Release(){ if(!--m_refc){ delete this; return 0; } return m_refc; }
HRESULT GetTypeInfoCount(UINT *pctinfo){ return E_NOTIMPL; }
HRESULT GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo){ return E_NOTIMPL; }
HRESULT GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId){
if(_wcsicmp(*rgszNames, L"MsgBox") == 0){
*rgDispId = 1;
}else
{
return DISP_E_MEMBERNOTFOUND;
}
return S_OK;
}
HRESULT Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
if(dispIdMember == 1){
pVarResult->vt = VT_I8;
pVarResult->llVal = MessageBoxW(nullptr, pDispParams->rgvarg[0].bstrVal, L"", MB_OK);
}else
{
return DISP_E_MEMBERNOTFOUND;
}
return S_OK;
}
};
class CFactory : public IClassFactory{
private:
ULONG m_refc = 1;
public:
HRESULT QueryInterface(REFIID riid, void** ppvObject){ return E_NOTIMPL; }
ULONG AddRef(){ return ++m_refc; }
ULONG Release(){ if(!--m_refc){ delete this; return 0; } return m_refc; }
HRESULT CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject){
*ppvObject = new GUI;
return S_OK;
}
HRESULT LockServer(BOOL fLock){
m_refc += fLock ? 1 : -1;
return S_OK;
}
} g_oFactory;
extern "C"
HRESULT DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv){
g_oFactory.AddRef();
*ppv = (IClassFactory*)&g_oFactory;
return S_OK;
}
extern "C"
HRESULT DllCanUnloadNow(){
return S_FALSE;
}