Hex Artifact Content Вы: nobody
Вход

Artifact a88bdac163f3f0c15d88230935f85b50f45c7ee7:


0000: 2f 2f 20 61 64 64 69 6e 2e 68 70 70 0d 0a 2f 2f  // addin.hpp..//
0010: 20 28 63 29 20 c0 eb e5 ea f1 e0 ed e4 f0 20 ce   (c) ......... .
0020: f0 e5 f4 ea ee e2 0d 0a 2f 2f 20 c7 e0 e3 ee eb  ........// .....
0030: ee e2 ea e8 20 e8 ed f2 e5 f0 f4 e5 e9 f1 ee e2  .... ...........
0040: 20 31 d1 20 e8 20 f0 e5 e0 eb e8 e7 f6 e8 ff 20   1. . ......... 
0050: 49 49 6e 69 74 44 6f 6e 65 2e 0d 0a 2f 2f 20 c7  IInitDone...// .
0060: e0 e3 f0 f3 e7 ea e0 20 c2 ca 20 e1 e5 e7 20 43  ....... .. ... C
0070: 4f 4d 20 e8 20 f0 e5 e5 f1 f2 f0 e0 2e 0d 0a 0d  OM . ...........
0080: 0a 23 70 72 61 67 6d 61 20 6f 6e 63 65 0d 0a 23  .#pragma once..#
0090: 70 72 61 67 6d 61 20 70 61 63 6b 28 70 75 73 68  pragma pack(push
00a0: 2c 20 38 29 0d 0a 0d 0a 23 69 6e 63 6c 75 64 65  , 8)....#include
00b0: 20 3c 63 6f 6d 64 65 66 2e 68 3e 0d 0a 0d 0a 73   <comdef.h>....s
00c0: 74 72 75 63 74 20 5f 5f 64 65 63 6c 73 70 65 63  truct __declspec
00d0: 28 75 75 69 64 28 22 61 62 36 33 34 30 30 31 2d  (uuid("ab634001-
00e0: 66 31 33 64 2d 31 31 64 30 2d 61 34 35 39 2d 30  f13d-11d0-a459-0
00f0: 30 34 30 39 35 65 31 64 61 65 61 22 29 29 0d 0a  04095e1daea"))..
0100: 49 49 6e 69 74 44 6f 6e 65 20 3a 20 49 55 6e 6b  IInitDone : IUnk
0110: 6e 6f 77 6e 0d 0a 7b 0d 0a 09 53 54 44 4d 45 54  nown..{...STDMET
0120: 48 4f 44 28 49 6e 69 74 29 28 49 44 69 73 70 61  HOD(Init)(IDispa
0130: 74 63 68 20 2a 70 43 6f 6e 6e 65 63 74 69 6f 6e  tch *pConnection
0140: 29 20 3d 20 30 3b 0d 0a 09 53 54 44 4d 45 54 48  ) = 0;...STDMETH
0150: 4f 44 28 44 6f 6e 65 29 28 29 20 3d 20 30 3b 0d  OD(Done)() = 0;.
0160: 0a 09 53 54 44 4d 45 54 48 4f 44 28 47 65 74 49  ..STDMETHOD(GetI
0170: 6e 66 6f 29 28 53 41 46 45 41 52 52 41 59 20 2a  nfo)(SAFEARRAY *
0180: 2a 70 49 6e 66 6f 29 20 3d 20 30 3b 0d 0a 7d 3b  *pInfo) = 0;..};
0190: 0d 0a 0d 0a 73 74 72 75 63 74 20 5f 5f 64 65 63  ....struct __dec
01a0: 6c 73 70 65 63 28 75 75 69 64 28 22 61 62 36 33  lspec(uuid("ab63
01b0: 34 30 30 32 2d 66 31 33 64 2d 31 31 64 30 2d 61  4002-f13d-11d0-a
01c0: 34 35 39 2d 30 30 34 30 39 35 65 31 64 61 65 61  459-004095e1daea
01d0: 22 29 29 0d 0a 49 50 72 6f 70 65 72 74 79 50 72  "))..IPropertyPr
01e0: 6f 66 69 6c 65 20 3a 20 49 50 72 6f 70 65 72 74  ofile : IPropert
01f0: 79 42 61 67 0d 0a 7b 0d 0a 09 53 54 44 4d 45 54  yBag..{...STDMET
0200: 48 4f 44 28 52 65 67 69 73 74 65 72 50 72 6f 66  HOD(RegisterProf
0210: 69 6c 65 41 73 29 28 42 53 54 52 20 62 73 74 72  ileAs)(BSTR bstr
0220: 50 72 6f 66 69 6c 65 4e 61 6d 65 29 20 3d 20 30  ProfileName) = 0
0230: 3b 0d 0a 7d 3b 0d 0a 0d 0a 73 74 72 75 63 74 20  ;..};....struct 
0240: 5f 5f 64 65 63 6c 73 70 65 63 28 75 75 69 64 28  __declspec(uuid(
0250: 22 61 62 36 33 34 30 30 34 2d 66 31 33 64 2d 31  "ab634004-f13d-1
0260: 31 64 30 2d 61 34 35 39 2d 30 30 34 30 39 35 65  1d0-a459-004095e
0270: 31 64 61 65 61 22 29 29 0d 0a 49 41 73 79 6e 63  1daea"))..IAsync
0280: 45 76 65 6e 74 20 3a 20 49 55 6e 6b 6e 6f 77 6e  Event : IUnknown
0290: 0d 0a 7b 0d 0a 09 53 54 44 4d 45 54 48 4f 44 28  ..{...STDMETHOD(
02a0: 53 65 74 45 76 65 6e 74 42 75 66 66 65 72 44 65  SetEventBufferDe
02b0: 70 74 68 29 28 6c 6f 6e 67 20 6c 44 65 70 74 68  pth)(long lDepth
02c0: 29 20 3d 20 30 3b 0d 0a 09 53 54 44 4d 45 54 48  ) = 0;...STDMETH
02d0: 4f 44 28 47 65 74 45 76 65 6e 74 42 75 66 66 65  OD(GetEventBuffe
02e0: 72 44 65 70 74 68 29 28 6c 6f 6e 67 20 2a 70 6c  rDepth)(long *pl
02f0: 44 65 70 74 68 29 20 3d 20 30 3b 0d 0a 09 53 54  Depth) = 0;...ST
0300: 44 4d 45 54 48 4f 44 28 45 78 74 65 72 6e 61 6c  DMETHOD(External
0310: 45 76 65 6e 74 29 28 42 53 54 52 20 62 73 74 72  Event)(BSTR bstr
0320: 53 6f 75 72 63 65 2c 20 42 53 54 52 20 62 73 74  Source, BSTR bst
0330: 72 4d 65 73 73 61 67 65 2c 20 42 53 54 52 20 62  rMessage, BSTR b
0340: 73 74 72 44 61 74 61 29 20 3d 20 30 3b 0d 0a 09  strData) = 0;...
0350: 53 54 44 4d 45 54 48 4f 44 28 43 6c 65 61 6e 42  STDMETHOD(CleanB
0360: 75 66 66 65 72 29 28 29 20 3d 20 30 3b 0d 0a 7d  uffer)() = 0;..}
0370: 3b 0d 0a 0d 0a 73 74 72 75 63 74 20 5f 5f 64 65  ;....struct __de
0380: 63 6c 73 70 65 63 28 75 75 69 64 28 22 61 62 36  clspec(uuid("ab6
0390: 33 34 30 30 33 2d 66 31 33 64 2d 31 31 64 30 2d  34003-f13d-11d0-
03a0: 61 34 35 39 2d 30 30 34 30 39 35 65 31 64 61 65  a459-004095e1dae
03b0: 61 22 29 29 0d 0a 49 4c 61 6e 67 75 61 67 65 45  a"))..ILanguageE
03c0: 78 74 65 6e 64 65 72 20 3a 20 49 55 6e 6b 6e 6f  xtender : IUnkno
03d0: 77 6e 0d 0a 7b 0d 0a 09 53 54 44 4d 45 54 48 4f  wn..{...STDMETHO
03e0: 44 28 52 65 67 69 73 74 65 72 45 78 74 65 6e 73  D(RegisterExtens
03f0: 69 6f 6e 41 73 29 28 42 53 54 52 20 2a 62 73 74  ionAs)(BSTR *bst
0400: 72 45 78 74 65 6e 73 69 6f 6e 4e 61 6d 65 29 20  rExtensionName) 
0410: 3d 20 30 3b 0d 0a 09 53 54 44 4d 45 54 48 4f 44  = 0;...STDMETHOD
0420: 28 47 65 74 4e 50 72 6f 70 73 29 28 6c 6f 6e 67  (GetNProps)(long
0430: 20 2a 70 6c 50 72 6f 70 73 29 20 3d 20 30 3b 0d   *plProps) = 0;.
0440: 0a 09 53 54 44 4d 45 54 48 4f 44 28 46 69 6e 64  ..STDMETHOD(Find
0450: 50 72 6f 70 29 28 42 53 54 52 20 62 73 74 72 50  Prop)(BSTR bstrP
0460: 72 6f 70 4e 61 6d 65 2c 20 6c 6f 6e 67 20 2a 70  ropName, long *p
0470: 6c 50 72 6f 70 4e 75 6d 29 20 3d 20 30 3b 0d 0a  lPropNum) = 0;..
0480: 09 53 54 44 4d 45 54 48 4f 44 28 47 65 74 50 72  .STDMETHOD(GetPr
0490: 6f 70 4e 61 6d 65 29 28 6c 6f 6e 67 20 6c 50 72  opName)(long lPr
04a0: 6f 70 4e 75 6d 2c 20 6c 6f 6e 67 20 6c 50 72 6f  opNum, long lPro
04b0: 70 41 6c 69 61 73 2c 20 42 53 54 52 20 2a 70 62  pAlias, BSTR *pb
04c0: 73 74 72 50 72 6f 70 4e 61 6d 65 29 20 3d 20 30  strPropName) = 0
04d0: 3b 0d 0a 09 53 54 44 4d 45 54 48 4f 44 28 47 65  ;...STDMETHOD(Ge
04e0: 74 50 72 6f 70 56 61 6c 29 28 6c 6f 6e 67 20 6c  tPropVal)(long l
04f0: 50 72 6f 70 4e 75 6d 2c 20 56 41 52 49 41 4e 54  PropNum, VARIANT
0500: 20 2a 70 76 61 72 50 72 6f 70 56 61 6c 29 20 3d   *pvarPropVal) =
0510: 20 30 3b 0d 0a 09 53 54 44 4d 45 54 48 4f 44 28   0;...STDMETHOD(
0520: 53 65 74 50 72 6f 70 56 61 6c 29 28 6c 6f 6e 67  SetPropVal)(long
0530: 20 6c 50 72 6f 70 4e 75 6d 2c 20 56 41 52 49 41   lPropNum, VARIA
0540: 4e 54 20 2a 76 61 72 50 72 6f 70 56 61 6c 29 20  NT *varPropVal) 
0550: 3d 20 30 3b 0d 0a 09 53 54 44 4d 45 54 48 4f 44  = 0;...STDMETHOD
0560: 28 49 73 50 72 6f 70 52 65 61 64 61 62 6c 65 29  (IsPropReadable)
0570: 28 6c 6f 6e 67 20 6c 50 72 6f 70 4e 75 6d 2c 20  (long lPropNum, 
0580: 6c 6f 6e 67 20 2a 70 62 6f 6f 6c 50 72 6f 70 52  long *pboolPropR
0590: 65 61 64 29 20 3d 20 30 3b 0d 0a 09 53 54 44 4d  ead) = 0;...STDM
05a0: 45 54 48 4f 44 28 49 73 50 72 6f 70 57 72 69 74  ETHOD(IsPropWrit
05b0: 61 62 6c 65 29 28 6c 6f 6e 67 20 6c 50 72 6f 70  able)(long lProp
05c0: 4e 75 6d 2c 20 6c 6f 6e 67 20 2a 70 62 6f 6f 6c  Num, long *pbool
05d0: 50 72 6f 70 57 72 69 74 65 29 20 3d 20 30 3b 0d  PropWrite) = 0;.
05e0: 0a 09 53 54 44 4d 45 54 48 4f 44 28 47 65 74 4e  ..STDMETHOD(GetN
05f0: 4d 65 74 68 6f 64 73 29 28 6c 6f 6e 67 20 2a 70  Methods)(long *p
0600: 6c 4d 65 74 68 6f 64 73 20 29 20 3d 20 30 3b 0d  lMethods ) = 0;.
0610: 0a 09 53 54 44 4d 45 54 48 4f 44 28 46 69 6e 64  ..STDMETHOD(Find
0620: 4d 65 74 68 6f 64 29 28 42 53 54 52 20 62 73 74  Method)(BSTR bst
0630: 72 4d 65 74 68 6f 64 4e 61 6d 65 2c 20 6c 6f 6e  rMethodName, lon
0640: 67 20 2a 70 6c 4d 65 74 68 6f 64 4e 75 6d 29 20  g *plMethodNum) 
0650: 3d 20 30 3b 0d 0a 09 53 54 44 4d 45 54 48 4f 44  = 0;...STDMETHOD
0660: 28 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 29 28  (GetMethodName)(
0670: 6c 6f 6e 67 20 6c 4d 65 74 68 6f 64 4e 75 6d 2c  long lMethodNum,
0680: 20 6c 6f 6e 67 20 6c 4d 65 74 68 6f 64 41 6c 69   long lMethodAli
0690: 61 73 2c 20 42 53 54 52 20 2a 70 62 73 74 72 4d  as, BSTR *pbstrM
06a0: 65 74 68 6f 64 4e 61 6d 65 29 20 3d 20 30 3b 0d  ethodName) = 0;.
06b0: 0a 09 53 54 44 4d 45 54 48 4f 44 28 47 65 74 4e  ..STDMETHOD(GetN
06c0: 50 61 72 61 6d 73 29 28 6c 6f 6e 67 20 6c 4d 65  Params)(long lMe
06d0: 74 68 6f 64 4e 75 6d 2c 20 6c 6f 6e 67 20 2a 70  thodNum, long *p
06e0: 6c 50 61 72 61 6d 73 29 20 3d 20 30 3b 0d 0a 09  lParams) = 0;...
06f0: 53 54 44 4d 45 54 48 4f 44 28 47 65 74 50 61 72  STDMETHOD(GetPar
0700: 61 6d 44 65 66 56 61 6c 75 65 29 28 6c 6f 6e 67  amDefValue)(long
0710: 20 6c 4d 65 74 68 6f 64 4e 75 6d 2c 20 6c 6f 6e   lMethodNum, lon
0720: 67 20 6c 50 61 72 61 6d 4e 75 6d 2c 20 56 41 52  g lParamNum, VAR
0730: 49 41 4e 54 20 2a 70 76 61 72 50 61 72 61 6d 44  IANT *pvarParamD
0740: 65 66 56 61 6c 75 65 29 20 3d 20 30 3b 0d 0a 09  efValue) = 0;...
0750: 53 54 44 4d 45 54 48 4f 44 28 48 61 73 52 65 74  STDMETHOD(HasRet
0760: 56 61 6c 29 28 6c 6f 6e 67 20 6c 4d 65 74 68 6f  Val)(long lMetho
0770: 64 4e 75 6d 2c 20 6c 6f 6e 67 20 2a 70 62 6f 6f  dNum, long *pboo
0780: 6c 52 65 74 56 61 6c 75 65 29 20 3d 20 30 3b 0d  lRetValue) = 0;.
0790: 0a 09 53 54 44 4d 45 54 48 4f 44 28 43 61 6c 6c  ..STDMETHOD(Call
07a0: 41 73 50 72 6f 63 29 28 6c 6f 6e 67 20 6c 4d 65  AsProc)(long lMe
07b0: 74 68 6f 64 4e 75 6d 2c 20 53 41 46 45 41 52 52  thodNum, SAFEARR
07c0: 41 59 20 2a 2a 70 61 50 61 72 61 6d 73 29 20 3d  AY **paParams) =
07d0: 20 30 3b 0d 0a 09 53 54 44 4d 45 54 48 4f 44 28   0;...STDMETHOD(
07e0: 43 61 6c 6c 41 73 46 75 6e 63 29 28 6c 6f 6e 67  CallAsFunc)(long
07f0: 20 6c 4d 65 74 68 6f 64 4e 75 6d 2c 20 56 41 52   lMethodNum, VAR
0800: 49 41 4e 54 20 2a 70 76 61 72 52 65 74 56 61 6c  IANT *pvarRetVal
0810: 75 65 2c 20 53 41 46 45 41 52 52 41 59 20 2a 2a  ue, SAFEARRAY **
0820: 70 61 50 61 72 61 6d 73 29 20 3d 20 30 3b 0d 0a  paParams) = 0;..
0830: 7d 3b 0d 0a 0d 0a 73 74 72 75 63 74 20 5f 5f 64  };....struct __d
0840: 65 63 6c 73 70 65 63 28 75 75 69 64 28 22 61 62  eclspec(uuid("ab
0850: 36 33 34 30 30 35 2d 66 31 33 64 2d 31 31 64 30  634005-f13d-11d0
0860: 2d 61 34 35 39 2d 30 30 34 30 39 35 65 31 64 61  -a459-004095e1da
0870: 65 61 22 29 29 0d 0a 49 53 74 61 74 75 73 4c 69  ea"))..IStatusLi
0880: 6e 65 20 3a 20 49 55 6e 6b 6e 6f 77 6e 0d 0a 7b  ne : IUnknown..{
0890: 0d 0a 09 53 54 44 4d 45 54 48 4f 44 28 53 65 74  ...STDMETHOD(Set
08a0: 53 74 61 74 75 73 4c 69 6e 65 29 28 42 53 54 52  StatusLine)(BSTR
08b0: 20 62 73 74 72 53 74 61 74 75 73 4c 69 6e 65 29   bstrStatusLine)
08c0: 20 3d 20 30 3b 0d 0a 09 53 54 44 4d 45 54 48 4f   = 0;...STDMETHO
08d0: 44 28 52 65 73 65 74 53 74 61 74 75 73 4c 69 6e  D(ResetStatusLin
08e0: 65 29 28 29 20 3d 20 30 3b 0d 0a 7d 3b 0d 0a 0d  e)() = 0;..};...
08f0: 0a 73 74 72 75 63 74 20 5f 5f 64 65 63 6c 73 70  .struct __declsp
0900: 65 63 28 75 75 69 64 28 22 65 66 65 31 39 65 61  ec(uuid("efe19ea
0910: 30 2d 30 39 65 34 2d 31 31 64 32 2d 61 36 30 31  0-09e4-11d2-a601
0920: 2d 30 30 38 30 34 38 64 61 30 30 64 65 22 29 29  -008048da00de"))
0930: 0d 0a 49 45 78 74 57 6e 64 73 53 75 70 70 6f 72  ..IExtWndsSuppor
0940: 74 20 3a 20 49 55 6e 6b 6e 6f 77 6e 0d 0a 7b 0d  t : IUnknown..{.
0950: 0a 09 53 54 44 4d 45 54 48 4f 44 28 47 65 74 41  ..STDMETHOD(GetA
0960: 70 70 4d 61 69 6e 46 72 61 6d 65 29 28 77 69 72  ppMainFrame)(wir
0970: 65 48 57 4e 44 20 2a 68 77 6e 64 29 20 3d 20 30  eHWND *hwnd) = 0
0980: 3b 0d 0a 09 53 54 44 4d 45 54 48 4f 44 28 47 65  ;...STDMETHOD(Ge
0990: 74 41 70 70 4d 44 49 46 72 61 6d 65 29 28 77 69  tAppMDIFrame)(wi
09a0: 72 65 48 57 4e 44 20 2a 68 77 6e 64 29 20 3d 20  reHWND *hwnd) = 
09b0: 30 3b 0d 0a 09 53 54 44 4d 45 54 48 4f 44 28 43  0;...STDMETHOD(C
09c0: 72 65 61 74 65 41 64 64 49 6e 57 69 6e 64 6f 77  reateAddInWindow
09d0: 29 28 0d 0a 09 09 42 53 54 52 20 62 73 74 72 50  )(....BSTR bstrP
09e0: 72 6f 67 49 44 2c 0d 0a 09 09 42 53 54 52 20 62  rogID,....BSTR b
09f0: 73 74 72 57 69 6e 64 6f 77 4e 61 6d 65 2c 0d 0a  strWindowName,..
0a00: 09 09 6c 6f 6e 67 20 64 77 53 74 79 6c 65 73 2c  ..long dwStyles,
0a10: 0d 0a 09 09 6c 6f 6e 67 20 64 77 45 78 53 74 79  ....long dwExSty
0a20: 6c 65 73 2c 0d 0a 09 09 73 74 72 75 63 74 20 74  les,....struct t
0a30: 61 67 52 45 43 54 20 2a 72 63 74 6c 2c 0d 0a 09  agRECT *rctl,...
0a40: 09 6c 6f 6e 67 20 46 6c 61 67 73 2c 0d 0a 09 09  .long Flags,....
0a50: 77 69 72 65 48 57 4e 44 20 2a 70 48 77 6e 64 2c  wireHWND *pHwnd,
0a60: 0d 0a 09 09 49 44 69 73 70 61 74 63 68 20 2a 2a  ....IDispatch **
0a70: 70 44 69 73 70 29 20 3d 20 30 3b 0d 0a 7d 3b 0d  pDisp) = 0;..};.
0a80: 0a 0d 0a 5f 43 4f 4d 5f 53 4d 41 52 54 50 54 52  ..._COM_SMARTPTR
0a90: 5f 54 59 50 45 44 45 46 28 49 49 6e 69 74 44 6f  _TYPEDEF(IInitDo
0aa0: 6e 65 2c 20 5f 5f 75 75 69 64 6f 66 28 49 49 6e  ne, __uuidof(IIn
0ab0: 69 74 44 6f 6e 65 29 29 3b 0d 0a 5f 43 4f 4d 5f  itDone));.._COM_
0ac0: 53 4d 41 52 54 50 54 52 5f 54 59 50 45 44 45 46  SMARTPTR_TYPEDEF
0ad0: 28 49 50 72 6f 70 65 72 74 79 50 72 6f 66 69 6c  (IPropertyProfil
0ae0: 65 2c 20 5f 5f 75 75 69 64 6f 66 28 49 50 72 6f  e, __uuidof(IPro
0af0: 70 65 72 74 79 50 72 6f 66 69 6c 65 29 29 3b 0d  pertyProfile));.
0b00: 0a 5f 43 4f 4d 5f 53 4d 41 52 54 50 54 52 5f 54  ._COM_SMARTPTR_T
0b10: 59 50 45 44 45 46 28 49 41 73 79 6e 63 45 76 65  YPEDEF(IAsyncEve
0b20: 6e 74 2c 20 5f 5f 75 75 69 64 6f 66 28 49 41 73  nt, __uuidof(IAs
0b30: 79 6e 63 45 76 65 6e 74 29 29 3b 0d 0a 5f 43 4f  yncEvent));.._CO
0b40: 4d 5f 53 4d 41 52 54 50 54 52 5f 54 59 50 45 44  M_SMARTPTR_TYPED
0b50: 45 46 28 49 4c 61 6e 67 75 61 67 65 45 78 74 65  EF(ILanguageExte
0b60: 6e 64 65 72 2c 20 5f 5f 75 75 69 64 6f 66 28 49  nder, __uuidof(I
0b70: 4c 61 6e 67 75 61 67 65 45 78 74 65 6e 64 65 72  LanguageExtender
0b80: 29 29 3b 0d 0a 5f 43 4f 4d 5f 53 4d 41 52 54 50  ));.._COM_SMARTP
0b90: 54 52 5f 54 59 50 45 44 45 46 28 49 53 74 61 74  TR_TYPEDEF(IStat
0ba0: 75 73 4c 69 6e 65 2c 20 5f 5f 75 75 69 64 6f 66  usLine, __uuidof
0bb0: 28 49 53 74 61 74 75 73 4c 69 6e 65 29 29 3b 0d  (IStatusLine));.
0bc0: 0a 5f 43 4f 4d 5f 53 4d 41 52 54 50 54 52 5f 54  ._COM_SMARTPTR_T
0bd0: 59 50 45 44 45 46 28 49 45 78 74 57 6e 64 73 53  YPEDEF(IExtWndsS
0be0: 75 70 70 6f 72 74 2c 20 5f 5f 75 75 69 64 6f 66  upport, __uuidof
0bf0: 28 49 45 78 74 57 6e 64 73 53 75 70 70 6f 72 74  (IExtWndsSupport
0c00: 29 29 3b 0d 0a 0d 0a 0d 0a 65 78 74 65 72 6e 20  ));......extern 
0c10: 22 43 22 20 63 6f 6e 73 74 20 47 55 49 44 20 5f  "C" const GUID _
0c20: 5f 64 65 63 6c 73 70 65 63 28 73 65 6c 65 63 74  _declspec(select
0c30: 61 6e 79 29 20 49 49 44 5f 49 49 6e 69 74 44 6f  any) IID_IInitDo
0c40: 6e 65 20 3d 20 0d 0a 20 20 20 20 7b 30 78 61 62  ne = ..    {0xab
0c50: 36 33 34 30 30 31 2c 30 78 66 31 33 64 2c 30 78  634001,0xf13d,0x
0c60: 31 31 64 30 2c 7b 30 78 61 34 2c 30 78 35 39 2c  11d0,{0xa4,0x59,
0c70: 30 78 30 30 2c 30 78 34 30 2c 30 78 39 35 2c 30  0x00,0x40,0x95,0
0c80: 78 65 31 2c 30 78 64 61 2c 30 78 65 61 7d 7d 3b  xe1,0xda,0xea}};
0c90: 0d 0a 65 78 74 65 72 6e 20 22 43 22 20 63 6f 6e  ..extern "C" con
0ca0: 73 74 20 47 55 49 44 20 5f 5f 64 65 63 6c 73 70  st GUID __declsp
0cb0: 65 63 28 73 65 6c 65 63 74 61 6e 79 29 20 49 49  ec(selectany) II
0cc0: 44 5f 49 50 72 6f 70 65 72 74 79 50 72 6f 66 69  D_IPropertyProfi
0cd0: 6c 65 20 3d 0d 0a 20 20 20 20 7b 30 78 61 62 36  le =..    {0xab6
0ce0: 33 34 30 30 32 2c 30 78 66 31 33 64 2c 30 78 31  34002,0xf13d,0x1
0cf0: 31 64 30 2c 7b 30 78 61 34 2c 30 78 35 39 2c 30  1d0,{0xa4,0x59,0
0d00: 78 30 30 2c 30 78 34 30 2c 30 78 39 35 2c 30 78  x00,0x40,0x95,0x
0d10: 65 31 2c 30 78 64 61 2c 30 78 65 61 7d 7d 3b 0d  e1,0xda,0xea}};.
0d20: 0a 65 78 74 65 72 6e 20 22 43 22 20 63 6f 6e 73  .extern "C" cons
0d30: 74 20 47 55 49 44 20 5f 5f 64 65 63 6c 73 70 65  t GUID __declspe
0d40: 63 28 73 65 6c 65 63 74 61 6e 79 29 20 49 49 44  c(selectany) IID
0d50: 5f 49 41 73 79 6e 63 45 76 65 6e 74 20 3d 0d 0a  _IAsyncEvent =..
0d60: 20 20 20 20 7b 30 78 61 62 36 33 34 30 30 34 2c      {0xab634004,
0d70: 30 78 66 31 33 64 2c 30 78 31 31 64 30 2c 7b 30  0xf13d,0x11d0,{0
0d80: 78 61 34 2c 30 78 35 39 2c 30 78 30 30 2c 30 78  xa4,0x59,0x00,0x
0d90: 34 30 2c 30 78 39 35 2c 30 78 65 31 2c 30 78 64  40,0x95,0xe1,0xd
0da0: 61 2c 30 78 65 61 7d 7d 3b 0d 0a 65 78 74 65 72  a,0xea}};..exter
0db0: 6e 20 22 43 22 20 63 6f 6e 73 74 20 47 55 49 44  n "C" const GUID
0dc0: 20 5f 5f 64 65 63 6c 73 70 65 63 28 73 65 6c 65   __declspec(sele
0dd0: 63 74 61 6e 79 29 20 49 49 44 5f 49 4c 61 6e 67  ctany) IID_ILang
0de0: 75 61 67 65 45 78 74 65 6e 64 65 72 20 3d 0d 0a  uageExtender =..
0df0: 20 20 20 20 7b 30 78 61 62 36 33 34 30 30 33 2c      {0xab634003,
0e00: 30 78 66 31 33 64 2c 30 78 31 31 64 30 2c 7b 30  0xf13d,0x11d0,{0
0e10: 78 61 34 2c 30 78 35 39 2c 30 78 30 30 2c 30 78  xa4,0x59,0x00,0x
0e20: 34 30 2c 30 78 39 35 2c 30 78 65 31 2c 30 78 64  40,0x95,0xe1,0xd
0e30: 61 2c 30 78 65 61 7d 7d 3b 0d 0a 65 78 74 65 72  a,0xea}};..exter
0e40: 6e 20 22 43 22 20 63 6f 6e 73 74 20 47 55 49 44  n "C" const GUID
0e50: 20 5f 5f 64 65 63 6c 73 70 65 63 28 73 65 6c 65   __declspec(sele
0e60: 63 74 61 6e 79 29 20 49 49 44 5f 49 53 74 61 74  ctany) IID_IStat
0e70: 75 73 4c 69 6e 65 20 3d 0d 0a 20 20 20 20 7b 30  usLine =..    {0
0e80: 78 61 62 36 33 34 30 30 35 2c 30 78 66 31 33 64  xab634005,0xf13d
0e90: 2c 30 78 31 31 64 30 2c 7b 30 78 61 34 2c 30 78  ,0x11d0,{0xa4,0x
0ea0: 35 39 2c 30 78 30 30 2c 30 78 34 30 2c 30 78 39  59,0x00,0x40,0x9
0eb0: 35 2c 30 78 65 31 2c 30 78 64 61 2c 30 78 65 61  5,0xe1,0xda,0xea
0ec0: 7d 7d 3b 0d 0a 65 78 74 65 72 6e 20 22 43 22 20  }};..extern "C" 
0ed0: 63 6f 6e 73 74 20 47 55 49 44 20 5f 5f 64 65 63  const GUID __dec
0ee0: 6c 73 70 65 63 28 73 65 6c 65 63 74 61 6e 79 29  lspec(selectany)
0ef0: 20 49 49 44 5f 49 45 78 74 57 6e 64 73 53 75 70   IID_IExtWndsSup
0f00: 70 6f 72 74 20 3d 0d 0a 20 20 20 20 7b 30 78 65  port =..    {0xe
0f10: 66 65 31 39 65 61 30 2c 30 78 30 39 65 34 2c 30  fe19ea0,0x09e4,0
0f20: 78 31 31 64 32 2c 7b 30 78 61 36 2c 30 78 30 31  x11d2,{0xa6,0x01
0f30: 2c 30 78 30 30 2c 30 78 38 30 2c 30 78 34 38 2c  ,0x00,0x80,0x48,
0f40: 30 78 64 61 2c 30 78 30 30 2c 30 78 64 65 7d 7d  0xda,0x00,0xde}}
0f50: 3b 0d 0a 65 78 74 65 72 6e 20 22 43 22 20 63 6f  ;..extern "C" co
0f60: 6e 73 74 20 47 55 49 44 20 5f 5f 64 65 63 6c 73  nst GUID __decls
0f70: 70 65 63 28 73 65 6c 65 63 74 61 6e 79 29 20 49  pec(selectany) I
0f80: 49 44 5f 49 50 72 6f 70 65 72 74 79 4c 69 6e 6b  ID_IPropertyLink
0f90: 20 3d 0d 0a 20 20 20 20 7b 30 78 35 32 35 31 32   =..    {0x52512
0fa0: 61 36 31 2c 30 78 32 61 39 64 2c 30 78 31 31 64  a61,0x2a9d,0x11d
0fb0: 31 2c 7b 30 78 61 34 2c 30 78 64 36 2c 30 78 30  1,{0xa4,0xd6,0x0
0fc0: 30 2c 30 78 34 30 2c 30 78 39 35 2c 30 78 65 31  0,0x40,0x95,0xe1
0fd0: 2c 30 78 64 61 2c 30 78 65 61 7d 7d 3b 0d 0a 0d  ,0xda,0xea}};...
0fe0: 0a 23 70 72 61 67 6d 61 20 70 61 63 6b 28 70 6f  .#pragma pack(po
0ff0: 70 29 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  p)....namespace 
1000: 61 64 64 69 6e 7b 0d 0a 2f 2f 20 c4 e5 f2 e0 eb  addin{..// .....
1010: e8 20 f0 e5 e0 eb e8 e7 e0 f6 e8 e8 20 ef e5 f0  . .......... ...
1020: e5 f5 e2 e0 f2 e0 0d 0a 6e 61 6d 65 73 70 61 63  ........namespac
1030: 65 20 69 6d 70 6c 5f 74 72 61 70 7b 0d 0a 0d 0a  e impl_trap{....
1040: 2f 2f 20 d4 f3 ed ea f6 e8 ff 20 e2 ee e7 e2 f0  // ....... .....
1050: e0 f9 e0 e5 f2 20 e0 e4 f0 e5 f1 20 ef e5 f0 e5  ..... ..... ....
1060: f5 ee e4 ed e8 ea e0 20 e2 20 f2 e0 e1 eb e8 f6  ....... . ......
1070: e5 20 e8 ec ef ee f0 f2 e0 20 f3 ea e0 e7 e0 ed  . ....... ......
1080: ed ee e9 20 e4 eb eb 20 e4 eb ff 0d 0a 2f 2f 20  ... ... .....// 
1090: f4 f3 ed ea f6 e8 e8 20 73 74 72 46 75 6e 63 2c  ....... strFunc,
10a0: 20 e8 ec ef ee f0 f2 e8 f0 ee e2 e0 ed ed ee e9   ...............
10b0: 20 e8 e7 20 73 74 72 45 78 70 6f 72 74 65 72 20   .. strExporter 
10c0: e4 eb eb 2e 0d 0a 2f 2f 20 c2 cd c8 cc c0 cd c8  ......// .......
10d0: c5 3a 20 ed e8 ea e0 ea e8 f5 20 ef f0 ee e2 e5  .: ....... .....
10e0: f0 ee ea 20 ed e5 20 e4 e5 eb e0 e5 f2 f1 ff 2e  ... .. .........
10f0: 20 c2 fb e7 fb e2 e0 e9 f2 e5 20 ec e5 f2 ee e4   ......... .....
1100: 2c 20 e5 f1 eb e8 20 f2 ee f7 ed ee 20 e7 ed e0  , .... ..... ...
1110: e5 f2 e5 2c 0d 0a 2f 2f 20 f7 f2 ee 20 68 44 6c  ...,..// ... hDl
1120: 6c 20 e8 ec ef ee f0 f2 e8 f0 f3 e5 f2 20 73 74  l ........... st
1130: 72 46 75 6e 63 20 e8 e7 20 73 74 72 45 78 70 6f  rFunc .. strExpo
1140: 72 74 65 72 0d 0a 73 74 61 74 69 63 20 69 6e 6c  rter..static inl
1150: 69 6e 65 20 44 57 4f 52 44 2a 20 47 65 74 54 68  ine DWORD* GetTh
1160: 75 6e 6b 41 64 64 72 65 73 28 48 49 4e 53 54 41  unkAddres(HINSTA
1170: 4e 43 45 20 68 44 6c 6c 2c 20 4c 50 43 53 54 52  NCE hDll, LPCSTR
1180: 20 73 74 72 45 78 70 6f 72 74 65 72 2c 20 4c 50   strExporter, LP
1190: 43 53 54 52 20 73 74 72 46 75 6e 63 29 0d 0a 7b  CSTR strFunc)..{
11a0: 0d 0a 09 42 59 54 45 20 2a 70 69 6d 61 67 65 20  ...BYTE *pimage 
11b0: 3d 20 72 65 69 6e 74 65 72 70 72 65 74 5f 63 61  = reinterpret_ca
11c0: 73 74 3c 42 59 54 45 2a 3e 28 68 44 6c 6c 29 3b  st<BYTE*>(hDll);
11d0: 0d 0a 09 50 49 4d 41 47 45 5f 4f 50 54 49 4f 4e  ...PIMAGE_OPTION
11e0: 41 4c 5f 48 45 41 44 45 52 20 69 6f 68 3d 72 65  AL_HEADER ioh=re
11f0: 69 6e 74 65 72 70 72 65 74 5f 63 61 73 74 3c 50  interpret_cast<P
1200: 49 4d 41 47 45 5f 4f 50 54 49 4f 4e 41 4c 5f 48  IMAGE_OPTIONAL_H
1210: 45 41 44 45 52 3e 28 70 69 6d 61 67 65 20 2b 0d  EADER>(pimage +.
1220: 0a 09 09 72 65 69 6e 74 65 72 70 72 65 74 5f 63  ...reinterpret_c
1230: 61 73 74 3c 50 49 4d 41 47 45 5f 44 4f 53 5f 48  ast<PIMAGE_DOS_H
1240: 45 41 44 45 52 3e 28 68 44 6c 6c 29 2d 3e 65 5f  EADER>(hDll)->e_
1250: 6c 66 61 6e 65 77 20 2b 20 34 20 2b 20 73 69 7a  lfanew + 4 + siz
1260: 65 6f 66 28 49 4d 41 47 45 5f 46 49 4c 45 5f 48  eof(IMAGE_FILE_H
1270: 45 41 44 45 52 29 29 3b 0d 0a 09 0d 0a 09 50 49  EADER));......PI
1280: 4d 41 47 45 5f 49 4d 50 4f 52 54 5f 44 45 53 43  MAGE_IMPORT_DESC
1290: 52 49 50 54 4f 52 20 69 69 64 3d 72 65 69 6e 74  RIPTOR iid=reint
12a0: 65 72 70 72 65 74 5f 63 61 73 74 3c 50 49 4d 41  erpret_cast<PIMA
12b0: 47 45 5f 49 4d 50 4f 52 54 5f 44 45 53 43 52 49  GE_IMPORT_DESCRI
12c0: 50 54 4f 52 3e 28 70 69 6d 61 67 65 20 2b 0d 0a  PTOR>(pimage +..
12d0: 09 09 28 69 6f 68 2d 3e 44 61 74 61 44 69 72 65  ..(ioh->DataDire
12e0: 63 74 6f 72 79 5b 49 4d 41 47 45 5f 44 49 52 45  ctory[IMAGE_DIRE
12f0: 43 54 4f 52 59 5f 45 4e 54 52 59 5f 49 4d 50 4f  CTORY_ENTRY_IMPO
1300: 52 54 5d 2e 56 69 72 74 75 61 6c 41 64 64 72 65  RT].VirtualAddre
1310: 73 73 29 29 3b 0d 0a 09 0d 0a 09 2f 2f 20 c2 20  ss));......// . 
1320: f2 e0 e1 eb e8 f6 e5 20 e8 ec ef ee f0 f2 e0 20  ....... ....... 
1330: e8 f9 e5 ec 20 f1 ee ee f2 e2 e5 f2 f1 f2 e2 f3  .... ...........
1340: fe f9 e8 e9 20 fd eb e5 ec e5 ed f2 20 e4 eb ff  .... ....... ...
1350: 20 e1 e8 e1 eb e8 ee f2 e5 ea e8 0d 0a 09 77 68   .............wh
1360: 69 6c 65 28 69 69 64 2d 3e 4e 61 6d 65 29 20 20  ile(iid->Name)  
1370: 2f 2f e4 ee 20 f2 e5 f5 20 ef ee f0 20 ef ee ea  //.. ... ... ...
1380: e0 20 ef ee eb e5 20 f1 f2 f0 f3 ea f2 f3 f0 fb  . .... .........
1390: 20 ed e5 20 f1 ee e4 e5 f0 e6 e8 f2 20 30 0d 0a   .. ........ 0..
13a0: 09 7b 0d 0a 09 09 69 66 28 5f 73 74 72 63 6d 70  .{....if(_strcmp
13b0: 69 28 72 65 69 6e 74 65 72 70 72 65 74 5f 63 61  i(reinterpret_ca
13c0: 73 74 3c 63 68 61 72 2a 3e 28 70 69 6d 61 67 65  st<char*>(pimage
13d0: 20 2b 20 69 69 64 2d 3e 4e 61 6d 65 29 2c 20 73   + iid->Name), s
13e0: 74 72 45 78 70 6f 72 74 65 72 29 20 3d 3d 30 20  trExporter) ==0 
13f0: 29 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09  ).....break;....
1400: 69 69 64 2b 2b 3b 0d 0a 09 7d 0d 0a 0d 0a 09 50  iid++;...}.....P
1410: 49 4d 41 47 45 5f 54 48 55 4e 4b 5f 44 41 54 41  IMAGE_THUNK_DATA
1420: 20 69 73 64 20 3d 20 72 65 69 6e 74 65 72 70 72   isd = reinterpr
1430: 65 74 5f 63 61 73 74 3c 50 49 4d 41 47 45 5f 54  et_cast<PIMAGE_T
1440: 48 55 4e 4b 5f 44 41 54 41 3e 28 70 69 6d 61 67  HUNK_DATA>(pimag
1450: 65 20 2b 20 69 69 64 2d 3e 4f 72 69 67 69 6e 61  e + iid->Origina
1460: 6c 46 69 72 73 74 54 68 75 6e 6b 29 3b 0d 0a 09  lFirstThunk);...
1470: 44 57 4f 52 44 2a 20 70 52 65 61 6c 3d 72 65 69  DWORD* pReal=rei
1480: 6e 74 65 72 70 72 65 74 5f 63 61 73 74 3c 44 57  nterpret_cast<DW
1490: 4f 52 44 2a 3e 28 70 69 6d 61 67 65 20 2b 20 69  ORD*>(pimage + i
14a0: 69 64 2d 3e 46 69 72 73 74 54 68 75 6e 6b 29 3b  id->FirstThunk);
14b0: 0d 0a 09 66 6f 72 28 69 6e 74 20 69 3d 30 3b 3b  ...for(int i=0;;
14c0: 69 73 64 2b 2b 2c 20 69 2b 2b 29 0d 0a 09 7b 0d  isd++, i++)...{.
14d0: 0a 09 09 4c 50 43 53 54 52 20 6e 61 6d 65 3d 28  ...LPCSTR name=(
14e0: 4c 50 43 53 54 52 29 28 70 69 6d 61 67 65 20 2b  LPCSTR)(pimage +
14f0: 20 28 44 57 4f 52 44 29 28 28 50 49 4d 41 47 45   (DWORD)((PIMAGE
1500: 5f 49 4d 50 4f 52 54 5f 42 59 5f 4e 41 4d 45 29  _IMPORT_BY_NAME)
1510: 69 73 64 2d 3e 75 31 2e 41 64 64 72 65 73 73 4f  isd->u1.AddressO
1520: 66 44 61 74 61 29 2d 3e 4e 61 6d 65 29 3b 0d 0a  fData)->Name);..
1530: 09 09 69 66 28 21 5f 73 74 72 69 63 6d 70 28 6e  ..if(!_stricmp(n
1540: 61 6d 65 2c 20 73 74 72 46 75 6e 63 29 29 0d 0a  ame, strFunc))..
1550: 09 09 09 72 65 74 75 72 6e 20 70 52 65 61 6c 2b  ...return pReal+
1560: 69 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 73 74 61  i;...}..}....sta
1570: 74 69 63 20 69 6e 6c 69 6e 65 20 44 57 4f 52 44  tic inline DWORD
1580: 2a 20 47 65 74 54 68 75 6e 6b 41 64 64 72 65 73  * GetThunkAddres
1590: 28 4c 50 43 53 54 52 20 73 74 72 49 6d 70 6f 72  (LPCSTR strImpor
15a0: 74 65 72 2c 20 4c 50 43 53 54 52 20 73 74 72 45  ter, LPCSTR strE
15b0: 78 70 6f 72 74 65 72 2c 20 4c 50 43 53 54 52 20  xporter, LPCSTR 
15c0: 73 74 72 46 75 6e 63 29 0d 0a 7b 0d 0a 09 72 65  strFunc)..{...re
15d0: 74 75 72 6e 20 47 65 74 54 68 75 6e 6b 41 64 64  turn GetThunkAdd
15e0: 72 65 73 28 47 65 74 4d 6f 64 75 6c 65 48 61 6e  res(GetModuleHan
15f0: 64 6c 65 28 73 74 72 49 6d 70 6f 72 74 65 72 29  dle(strImporter)
1600: 2c 20 73 74 72 45 78 70 6f 72 74 65 72 2c 20 73  , strExporter, s
1610: 74 72 46 75 6e 63 29 3b 0d 0a 7d 0d 0a 0d 0a 73  trFunc);..}....s
1620: 74 72 75 63 74 20 74 72 61 70 5f 6c 6f 61 64 5f  truct trap_load_
1630: 76 6b 0d 0a 7b 0d 0a 09 73 74 61 74 69 63 20 74  vk..{...static t
1640: 72 61 70 5f 6c 6f 61 64 5f 76 6b 2a 26 20 47 65  rap_load_vk*& Ge
1650: 74 54 72 61 70 28 29 0d 0a 09 7b 0d 0a 09 09 73  tTrap()...{....s
1660: 74 61 74 69 63 20 74 72 61 70 5f 6c 6f 61 64 5f  tatic trap_load_
1670: 76 6b 2a 20 70 54 72 61 70 3b 0d 0a 09 09 72 65  vk* pTrap;....re
1680: 74 75 72 6e 20 70 54 72 61 70 3b 0d 0a 09 7d 0d  turn pTrap;...}.
1690: 0a 0d 0a 09 63 6f 6e 73 74 20 49 49 6e 69 74 44  ....const IInitD
16a0: 6f 6e 65 2a 20 70 41 64 64 69 6e 3b 0d 0a 09 63  one* pAddin;...c
16b0: 6f 6e 73 74 20 43 4c 53 49 44 26 20 70 43 6c 73  onst CLSID& pCls
16c0: 49 44 3b 0d 0a 09 44 57 4f 52 44 20 20 64 77 4f  ID;...DWORD  dwO
16d0: 6c 64 43 4c 53 49 44 46 72 6f 6d 50 72 6f 67 49  ldCLSIDFromProgI
16e0: 44 3b 0d 0a 09 44 57 4f 52 44 2a 20 70 4f 6c 64  D;...DWORD* pOld
16f0: 43 4c 53 49 44 46 72 6f 6d 50 72 6f 67 49 44 3b  CLSIDFromProgID;
1700: 0d 0a 09 44 57 4f 52 44 20 20 64 77 4f 6c 64 43  ...DWORD  dwOldC
1710: 6f 43 72 65 61 74 65 49 6e 73 74 61 6e 63 65 3b  oCreateInstance;
1720: 0d 0a 09 44 57 4f 52 44 2a 20 70 4f 6c 64 43 6f  ...DWORD* pOldCo
1730: 43 72 65 61 74 65 49 6e 73 74 61 6e 63 65 3b 0d  CreateInstance;.
1740: 0a 0d 0a 09 73 74 61 74 69 63 20 48 52 45 53 55  ....static HRESU
1750: 4c 54 20 53 54 44 41 50 49 43 41 4c 4c 54 59 50  LT STDAPICALLTYP
1760: 45 20 6d 79 43 4c 53 49 44 46 72 6f 6d 50 72 6f  E myCLSIDFromPro
1770: 67 49 44 28 4c 50 43 4f 4c 45 53 54 52 20 6c 70  gID(LPCOLESTR lp
1780: 73 7a 50 72 6f 67 49 44 2c 20 4c 50 43 4c 53 49  szProgID, LPCLSI
1790: 44 20 70 63 6c 73 69 64 29 0d 0a 09 7b 0d 0a 09  D pclsid)...{...
17a0: 09 2a 70 63 6c 73 69 64 3d 47 65 74 54 72 61 70  .*pclsid=GetTrap
17b0: 28 29 2d 3e 70 43 6c 73 49 44 3b 0d 0a 09 09 72  ()->pClsID;....r
17c0: 65 74 75 72 6e 20 53 5f 4f 4b 3b 0d 0a 09 7d 0d  eturn S_OK;...}.
17d0: 0a 0d 0a 09 73 74 61 74 69 63 20 48 52 45 53 55  ....static HRESU
17e0: 4c 54 20 53 54 44 41 50 49 43 41 4c 4c 54 59 50  LT STDAPICALLTYP
17f0: 45 20 6d 79 43 6f 43 72 65 61 74 65 49 6e 73 74  E myCoCreateInst
1800: 61 6e 63 65 28 52 45 46 43 4c 53 49 44 20 72 63  ance(REFCLSID rc
1810: 6c 73 69 64 2c 20 4c 50 55 4e 4b 4e 4f 57 4e 20  lsid, LPUNKNOWN 
1820: 70 55 6e 6b 4f 75 74 65 72 2c 0d 0a 09 09 09 09  pUnkOuter,......
1830: 09 09 20 20 44 57 4f 52 44 20 64 77 43 6c 73 43  ..  DWORD dwClsC
1840: 6f 6e 74 65 78 74 2c 20 52 45 46 49 49 44 20 72  ontext, REFIID r
1850: 69 69 64 2c 20 4c 50 56 4f 49 44 20 2a 70 70 76  iid, LPVOID *ppv
1860: 29 0d 0a 09 7b 0d 0a 09 09 74 72 61 70 5f 6c 6f  )...{....trap_lo
1870: 61 64 5f 76 6b 2a 20 70 54 72 61 70 3d 47 65 74  ad_vk* pTrap=Get
1880: 54 72 61 70 28 29 3b 0d 0a 09 09 2a 70 70 76 3d  Trap();....*ppv=
1890: 63 6f 6e 73 74 5f 63 61 73 74 3c 49 49 6e 69 74  const_cast<IInit
18a0: 44 6f 6e 65 2a 3e 28 70 54 72 61 70 2d 3e 70 41  Done*>(pTrap->pA
18b0: 64 64 69 6e 29 3b 0d 0a 09 09 64 65 6c 65 74 65  ddin);....delete
18c0: 20 70 54 72 61 70 3b 0d 0a 09 09 72 65 74 75 72   pTrap;....retur
18d0: 6e 20 53 5f 4f 4b 3b 0d 0a 09 7d 0d 0a 0d 0a 09  n S_OK;...}.....
18e0: 74 72 61 70 5f 6c 6f 61 64 5f 76 6b 28 63 6f 6e  trap_load_vk(con
18f0: 73 74 20 49 49 6e 69 74 44 6f 6e 65 2a 20 70 41  st IInitDone* pA
1900: 2c 20 63 6f 6e 73 74 20 43 4c 53 49 44 26 20 70  , const CLSID& p
1910: 43 6c 73 29 3a 0d 0a 09 09 70 41 64 64 69 6e 28  Cls):....pAddin(
1920: 70 41 29 2c 20 70 43 6c 73 49 44 28 70 43 6c 73  pA), pClsID(pCls
1930: 29 2c 20 70 4f 6c 64 43 4c 53 49 44 46 72 6f 6d  ), pOldCLSIDFrom
1940: 50 72 6f 67 49 44 28 4e 55 4c 4c 29 2c 20 70 4f  ProgID(NULL), pO
1950: 6c 64 43 6f 43 72 65 61 74 65 49 6e 73 74 61 6e  ldCoCreateInstan
1960: 63 65 28 4e 55 4c 4c 29 0d 0a 09 7b 0d 0a 09 09  ce(NULL)...{....
1970: 47 65 74 54 72 61 70 28 29 3d 74 68 69 73 3b 0d  GetTrap()=this;.
1980: 0a 09 09 48 49 4e 53 54 41 4e 43 45 20 68 53 65  ...HINSTANCE hSe
1990: 76 65 6e 3d 47 65 74 4d 6f 64 75 6c 65 48 61 6e  ven=GetModuleHan
19a0: 64 6c 65 28 22 73 65 76 65 6e 2e 64 6c 6c 22 29  dle("seven.dll")
19b0: 3b 0d 0a 0d 0a 09 09 70 4f 6c 64 43 4c 53 49 44  ;......pOldCLSID
19c0: 46 72 6f 6d 50 72 6f 67 49 44 20 3d 47 65 74 54  FromProgID =GetT
19d0: 68 75 6e 6b 41 64 64 72 65 73 28 68 53 65 76 65  hunkAddres(hSeve
19e0: 6e 2c 20 22 6f 6c 65 33 32 2e 64 6c 6c 22 2c 20  n, "ole32.dll", 
19f0: 22 43 4c 53 49 44 46 72 6f 6d 50 72 6f 67 49 44  "CLSIDFromProgID
1a00: 22 29 3b 0d 0a 09 09 64 77 4f 6c 64 43 4c 53 49  ");....dwOldCLSI
1a10: 44 46 72 6f 6d 50 72 6f 67 49 44 3d 2a 70 4f 6c  DFromProgID=*pOl
1a20: 64 43 4c 53 49 44 46 72 6f 6d 50 72 6f 67 49 44  dCLSIDFromProgID
1a30: 3b 0d 0a 09 09 0d 0a 09 09 70 4f 6c 64 43 6f 43  ;........pOldCoC
1a40: 72 65 61 74 65 49 6e 73 74 61 6e 63 65 3d 47 65  reateInstance=Ge
1a50: 74 54 68 75 6e 6b 41 64 64 72 65 73 28 68 53 65  tThunkAddres(hSe
1a60: 76 65 6e 2c 20 22 6f 6c 65 33 32 2e 64 6c 6c 22  ven, "ole32.dll"
1a70: 2c 20 22 43 6f 43 72 65 61 74 65 49 6e 73 74 61  , "CoCreateInsta
1a80: 6e 63 65 22 29 3b 0d 0a 09 09 64 77 4f 6c 64 43  nce");....dwOldC
1a90: 6f 43 72 65 61 74 65 49 6e 73 74 61 6e 63 65 3d  oCreateInstance=
1aa0: 2a 70 4f 6c 64 43 6f 43 72 65 61 74 65 49 6e 73  *pOldCoCreateIns
1ab0: 74 61 6e 63 65 3b 0d 0a 0d 0a 09 09 2f 2f 20 c7  tance;......// .
1ac0: e0 ec e5 ed ff e5 ec 20 e0 e4 f0 e5 f1 e0 20 ed  ....... ...... .
1ad0: e0 20 f1 e2 ee e8 20 f4 f3 ed ea f6 e8 e8 0d 0a  . .... .........
1ae0: 09 09 44 57 4f 52 44 20 6f 70 3b 0d 0a 09 09 56  ..DWORD op;....V
1af0: 69 72 74 75 61 6c 50 72 6f 74 65 63 74 28 70 4f  irtualProtect(pO
1b00: 6c 64 43 4c 53 49 44 46 72 6f 6d 50 72 6f 67 49  ldCLSIDFromProgI
1b10: 44 2c 20 34 2c 20 50 41 47 45 5f 45 58 45 43 55  D, 4, PAGE_EXECU
1b20: 54 45 5f 52 45 41 44 57 52 49 54 45 2c 20 26 6f  TE_READWRITE, &o
1b30: 70 29 3b 0d 0a 09 09 56 69 72 74 75 61 6c 50 72  p);....VirtualPr
1b40: 6f 74 65 63 74 28 70 4f 6c 64 43 6f 43 72 65 61  otect(pOldCoCrea
1b50: 74 65 49 6e 73 74 61 6e 63 65 2c 20 34 2c 20 50  teInstance, 4, P
1b60: 41 47 45 5f 45 58 45 43 55 54 45 5f 52 45 41 44  AGE_EXECUTE_READ
1b70: 57 52 49 54 45 2c 20 26 6f 70 29 3b 0d 0a 0d 0a  WRITE, &op);....
1b80: 09 09 2a 70 4f 6c 64 43 4c 53 49 44 46 72 6f 6d  ..*pOldCLSIDFrom
1b90: 50 72 6f 67 49 44 3d 72 65 69 6e 74 65 72 70 72  ProgID=reinterpr
1ba0: 65 74 5f 63 61 73 74 3c 44 57 4f 52 44 3e 28 26  et_cast<DWORD>(&
1bb0: 6d 79 43 4c 53 49 44 46 72 6f 6d 50 72 6f 67 49  myCLSIDFromProgI
1bc0: 44 29 3b 0d 0a 09 09 2a 70 4f 6c 64 43 6f 43 72  D);....*pOldCoCr
1bd0: 65 61 74 65 49 6e 73 74 61 6e 63 65 3d 72 65 69  eateInstance=rei
1be0: 6e 74 65 72 70 72 65 74 5f 63 61 73 74 3c 44 57  nterpret_cast<DW
1bf0: 4f 52 44 3e 28 26 6d 79 43 6f 43 72 65 61 74 65  ORD>(&myCoCreate
1c00: 49 6e 73 74 61 6e 63 65 29 3b 0d 0a 09 7d 0d 0a  Instance);...}..
1c10: 09 7e 74 72 61 70 5f 6c 6f 61 64 5f 76 6b 28 29  .~trap_load_vk()
1c20: 0d 0a 09 7b 0d 0a 09 09 2a 70 4f 6c 64 43 6f 43  ...{....*pOldCoC
1c30: 72 65 61 74 65 49 6e 73 74 61 6e 63 65 3d 64 77  reateInstance=dw
1c40: 4f 6c 64 43 6f 43 72 65 61 74 65 49 6e 73 74 61  OldCoCreateInsta
1c50: 6e 63 65 3b 0d 0a 09 09 2a 70 4f 6c 64 43 4c 53  nce;....*pOldCLS
1c60: 49 44 46 72 6f 6d 50 72 6f 67 49 44 3d 64 77 4f  IDFromProgID=dwO
1c70: 6c 64 43 4c 53 49 44 46 72 6f 6d 50 72 6f 67 49  ldCLSIDFromProgI
1c80: 44 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 7d 20  D;...}..};....} 
1c90: 2f 2f 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  // namespace imp
1ca0: 6c 5f 74 72 61 70 0d 0a 0d 0a 2f 2a 0d 0a d0 e5  l_trap..../*....
1cb0: e0 eb e8 e7 e0 f6 e8 ff 20 ee f1 ed ee e2 ed ee  ........ .......
1cc0: e3 ee 20 ee e1 fa e5 ea f2 e0 20 c2 ca 2e 0d 0a  .. ....... .....
1cd0: c4 e0 ed ed e0 ff 20 f0 e5 e0 eb e8 e7 e0 f6 e8  ...... .........
1ce0: ff 20 ef f0 e5 e4 ef ee eb e0 e3 e0 e5 f2 20 ed  . ............ .
1cf0: e0 eb e8 f7 e8 e5 20 ce c4 cd ce c3 ce 2d c5 c4  ...... ......-..
1d00: c8 cd d1 d2 c2 c5 cd cd ce c3 ce 20 e3 eb ee e1  ........... ....
1d10: e0 eb fc ed ee e3 ee 0d 0a ee e1 fa e5 ea f2 e0  ................
1d20: 20 c2 ca 2e 20 ce e1 e5 f1 ef e5 f7 e8 e2 e0 e5   ... ...........
1d30: f2 20 ea ee f0 f0 e5 ea f2 ed f3 fe 20 e7 e0 e3  . .......... ...
1d40: f0 f3 e7 ea f3 20 c2 ca 20 31 d1 ea ee e9 2c 20  ..... .. 1...., 
1d50: e1 e5 e7 20 e8 f1 ef ee eb fc e7 ee e2 e0 ed e8  ... ............
1d60: ff 0d 0a ef ee e4 f1 e8 f1 f2 e5 ec fb 20 43 4f  ............. CO
1d70: 4d 20 e8 20 ee e1 f0 e0 f9 e5 ed e8 e9 20 ea 20  M . ......... . 
1d80: f0 e5 e5 f1 f2 f0 f3 2e 20 c4 ee f1 f2 f3 ef 20  ........ ...... 
1d90: ea 20 e5 e4 e8 ed f1 f2 e2 e5 ed ed ee ec f3 20  . ............. 
1da0: ee e1 fa e5 ea f2 f3 20 c2 ca 0d 0a ee f1 f3 f9  ....... ........
1db0: e5 f1 f2 e2 eb ff e5 f2 f1 ff 20 f1 20 ef ee ec  .......... . ...
1dc0: ee f9 fc fe 20 f1 f2 e0 f2 e8 f7 e5 f1 ea ee e9  .... ...........
1dd0: 20 f4 f3 ed ea f6 e8 e8 20 47 65 74 41 64 64 69   ....... GetAddi
1de0: 6e 28 29 3b 0d 0a 0d 0a c8 f1 ef ee eb fc e7 ee  n();............
1df0: e2 e0 ed e8 e5 3a 0d 0a 0d 0a c2 e0 ec 20 ed e5  .....:....... ..
1e00: ee e1 f5 ee e4 e8 ec ee 20 ee ef f0 e5 e4 e5 eb  ........ .......
1e10: e8 f2 fc 20 f1 e2 ee e9 20 ea eb e0 f1 f1 2c 20  ... .... ....., 
1e20: f0 e5 e0 eb e8 e7 f3 fe f9 e8 e9 20 e4 e2 e0 20  ........... ... 
1e30: ec e5 f2 ee e4 e0 3a 0d 0a 42 4f 4f 4c 20 49 6e  ......:..BOOL In
1e40: 69 74 41 64 64 69 6e 28 49 44 69 73 70 61 74 63  itAddin(IDispatc
1e50: 68 2a 20 70 43 6f 6e 6e 65 63 74 69 6f 6e 29 3b  h* pConnection);
1e60: 0d 0a 76 6f 69 64 20 44 6f 6e 65 41 64 64 69 6e  ..void DoneAddin
1e70: 28 29 3b 0d 0a c4 eb ff 20 ea eb e0 f1 f1 e0 20  ();..... ...... 
1e80: e4 ee eb e6 e5 ed 20 e1 fb f2 fc 20 ed e0 e7 ed  ...... .... ....
1e90: e0 f7 e5 ed 20 f3 ed e8 ea e0 eb fc ed fb e9 20  .... .......... 
1ea0: 43 4c 53 49 44 2c 20 f1 20 ef ee ec ee f9 fc fe  CLSID, . .......
1eb0: 20 5f 5f 64 65 63 6c 73 70 65 63 28 75 75 69 64   __declspec(uuid
1ec0: 28 22 22 29 29 0d 0a 0d 0a ca eb e0 f1 f1 20 43  (""))......... C
1ed0: 4f 6e 65 41 64 64 69 6e 49 6d 70 6c 3c c2 e0 f8  OneAddinImpl<...
1ee0: ca eb e0 f1 f1 3e 20 e8 20 e1 f3 e4 e5 f2 20 ef  .....> . ..... .
1ef0: f0 e5 e4 f1 f2 e0 e2 eb ff f2 fc 20 ee e1 fa e5  ........... ....
1f00: ea f2 20 c2 ca 0d 0a c4 eb ff 20 e7 e0 e3 f0 f3  .. ....... .....
1f10: e7 ea e8 20 c2 ca 20 ed e5 ee e1 f5 ee e4 e8 ec  ... .. .........
1f20: ee 20 e2 20 44 6c 6c 4d 61 69 6e 20 f1 ee e7 e4  . . DllMain ....
1f30: e0 f2 fc 20 ef e5 f0 e2 fb e9 20 e8 20 e5 e4 e8  ... ...... . ...
1f40: ed f1 f2 e2 e5 ed ed fb e9 20 ee e1 fa e5 ea f2  ......... ......
1f50: 2c 0d 0a ec e5 f2 ee e4 ee ec 20 4f 6e 50 72 6f  ,......... OnPro
1f60: 63 65 73 73 41 74 74 61 63 68 2c 20 e8 20 f2 e0  cessAttach, . ..
1f70: ec 20 e6 e5 20 f3 ed e8 f7 f2 ee e6 e0 f2 fc 20  . .. .......... 
1f80: 4f 6e 50 72 6f 63 65 73 73 44 65 74 61 63 68 3a  OnProcessDetach:
1f90: 0d 0a 0d 0a cf f0 e8 ec e5 f0 3a 0d 0a 63 6c 61  ..........:..cla
1fa0: 73 73 20 5f 64 65 63 6c 73 70 65 63 28 75 75 69  ss _declspec(uui
1fb0: 64 28 22 30 30 63 64 39 34 37 65 2d 31 66 36 38  d("00cd947e-1f68
1fc0: 2d 34 62 61 36 2d 61 36 39 66 2d 39 39 30 61 38  -4ba6-a69f-990a8
1fd0: 61 66 66 64 38 31 35 22 29 29 20 43 41 64 64 69  affd815")) CAddi
1fe0: 6e 5f 3b 0d 0a 0d 0a 63 6c 61 73 73 20 43 41 64  n_;....class CAd
1ff0: 64 69 6e 5f 0d 0a 7b 0d 0a 70 72 6f 74 65 63 74  din_..{..protect
2000: 65 64 3a 0d 0a 09 42 4f 4f 4c 20 49 6e 69 74 41  ed:...BOOL InitA
2010: 64 64 69 6e 28 49 44 69 73 70 61 74 63 68 2a 20  ddin(IDispatch* 
2020: 70 43 6f 6e 6e 29 3b 0d 0a 09 76 6f 69 64 20 44  pConn);...void D
2030: 6f 6e 65 41 64 64 69 6e 28 29 3b 0d 0a 70 75 62  oneAddin();..pub
2040: 6c 69 63 3a 0d 0a 09 2e 2e 2e 20 ee f1 f2 e0 eb  lic:...... .....
2050: fc ed fb e5 20 ec e5 f2 ee e4 fb 0d 0a 7d 3b 0d  .... ........};.
2060: 0a 0d 0a 74 79 70 65 64 65 66 20 61 64 64 69 6e  ...typedef addin
2070: 3a 3a 43 4f 6e 65 41 64 64 69 6e 49 6d 70 6c 3c  ::COneAddinImpl<
2080: 43 41 64 64 69 6e 5f 3e 20 43 41 64 64 69 6e 3b  CAddin_> CAddin;
2090: 0d 0a 0d 0a 65 78 74 65 72 6e 20 22 43 22 0d 0a  ....extern "C"..
20a0: 69 6e 74 20 41 50 49 45 4e 54 52 59 20 44 6c 6c  int APIENTRY Dll
20b0: 4d 61 69 6e 28 48 49 4e 53 54 41 4e 43 45 20 68  Main(HINSTANCE h
20c0: 49 6e 73 74 61 6e 63 65 2c 20 44 57 4f 52 44 20  Instance, DWORD 
20d0: 64 77 52 65 61 73 6f 6e 2c 20 4c 50 56 4f 49 44  dwReason, LPVOID
20e0: 20 6c 70 52 65 73 65 72 76 65 64 29 0d 0a 7b 0d   lpReserved)..{.
20f0: 0a 09 69 66 28 64 77 52 65 61 73 6f 6e 20 3d 3d  ..if(dwReason ==
2100: 20 44 4c 4c 5f 50 52 4f 43 45 53 53 5f 41 54 54   DLL_PROCESS_ATT
2110: 41 43 48 29 0d 0a 09 09 43 41 64 64 69 6e 3a 3a  ACH)....CAddin::
2120: 4f 6e 50 72 6f 63 65 73 73 41 74 74 61 63 68 28  OnProcessAttach(
2130: 29 3b 0d 0a 09 65 6c 73 65 20 69 66 28 64 77 52  );...else if(dwR
2140: 65 61 73 6f 6e 20 3d 3d 20 44 4c 4c 5f 50 52 4f  eason == DLL_PRO
2150: 43 45 53 53 5f 44 45 54 41 43 48 29 0d 0a 09 09  CESS_DETACH)....
2160: 43 41 64 64 69 6e 3a 3a 4f 6e 50 72 6f 63 65 73  CAddin::OnProces
2170: 73 44 65 74 61 63 68 28 29 3b 0d 0a 09 72 65 74  sDetach();...ret
2180: 75 72 6e 20 31 3b 20 20 20 2f 2f 20 6f 6b 0d 0a  urn 1;   // ok..
2190: 7d 0d 0a 0d 0a 20 20 cb e8 e1 ee 20 f2 e0 ea 3a  }....  .... ...:
21a0: 0d 0a 0d 0a 63 6c 61 73 73 20 43 41 64 64 69 6e  ....class CAddin
21b0: 0d 0a 7b 0d 0a 70 72 6f 74 65 63 74 65 64 3a 0d  ..{..protected:.
21c0: 0a 09 42 4f 4f 4c 20 49 6e 69 74 41 64 64 69 6e  ..BOOL InitAddin
21d0: 28 49 44 69 73 70 61 74 63 68 2a 20 70 43 6f 6e  (IDispatch* pCon
21e0: 6e 29 3b 0d 0a 09 76 6f 69 64 20 44 6f 6e 65 41  n);...void DoneA
21f0: 64 64 69 6e 28 29 3b 0d 0a 70 75 62 6c 69 63 3a  ddin();..public:
2200: 0d 0a 09 43 41 64 64 69 6e 26 20 47 65 74 41 64  ...CAddin& GetAd
2210: 64 69 6e 28 29 7b 72 65 74 75 72 6e 20 61 64 64  din(){return add
2220: 69 6e 3a 3a 43 4f 6e 65 41 64 64 69 6e 49 6d 70  in::COneAddinImp
2230: 6c 3c 43 41 64 64 69 6e 3e 3a 3a 47 65 74 41 64  l<CAddin>::GetAd
2240: 64 69 6e 28 29 3b 7d 0d 0a 09 2e 2e 2e 20 ee f1  din();}...... ..
2250: f2 e0 eb fc ed fb e5 20 ec e5 f2 ee e4 fb 0d 0a  ....... ........
2260: 7d 3b 0d 0a 63 6c 61 73 73 20 5f 64 65 63 6c 73  };..class _decls
2270: 70 65 63 28 75 75 69 64 28 22 30 30 63 64 39 34  pec(uuid("00cd94
2280: 37 65 2d 31 66 36 38 2d 34 62 61 36 2d 61 36 39  7e-1f68-4ba6-a69
2290: 66 2d 39 39 30 61 38 61 66 66 64 38 31 35 22 29  f-990a8affd815")
22a0: 29 20 43 41 64 64 69 6e 3b 0d 0a 2e 2e 2e 2e 0d  ) CAddin;.......
22b0: 0a 65 78 74 65 72 6e 20 22 43 22 0d 0a 69 6e 74  .extern "C"..int
22c0: 20 41 50 49 45 4e 54 52 59 20 44 6c 6c 4d 61 69   APIENTRY DllMai
22d0: 6e 28 48 49 4e 53 54 41 4e 43 45 20 68 49 6e 73  n(HINSTANCE hIns
22e0: 74 61 6e 63 65 2c 20 44 57 4f 52 44 20 64 77 52  tance, DWORD dwR
22f0: 65 61 73 6f 6e 2c 20 4c 50 56 4f 49 44 20 6c 70  eason, LPVOID lp
2300: 52 65 73 65 72 76 65 64 29 0d 0a 7b 0d 0a 09 69  Reserved)..{...i
2310: 66 28 64 77 52 65 61 73 6f 6e 20 3d 3d 20 44 4c  f(dwReason == DL
2320: 4c 5f 50 52 4f 43 45 53 53 5f 41 54 54 41 43 48  L_PROCESS_ATTACH
2330: 29 0d 0a 09 09 61 64 64 69 6e 3a 3a 43 4f 6e 65  )....addin::COne
2340: 41 64 64 69 6e 49 6d 70 6c 3c 43 41 64 64 69 6e  AddinImpl<CAddin
2350: 3e 3a 3a 4f 6e 50 72 6f 63 65 73 73 41 74 74 61  >::OnProcessAtta
2360: 63 68 28 29 3b 0d 0a 09 65 6c 73 65 20 69 66 28  ch();...else if(
2370: 64 77 52 65 61 73 6f 6e 20 3d 3d 20 44 4c 4c 5f  dwReason == DLL_
2380: 50 52 4f 43 45 53 53 5f 44 45 54 41 43 48 29 0d  PROCESS_DETACH).
2390: 0a 09 09 61 64 64 69 6e 3a 3a 43 4f 6e 65 41 64  ...addin::COneAd
23a0: 64 69 6e 49 6d 70 6c 3c 43 41 64 64 69 6e 3e 3a  dinImpl<CAddin>:
23b0: 3a 4f 6e 50 72 6f 63 65 73 73 44 65 74 61 63 68  :OnProcessDetach
23c0: 28 29 3b 0d 0a 09 72 65 74 75 72 6e 20 31 3b 20  ();...return 1; 
23d0: 20 20 2f 2f 20 6f 6b 0d 0a 7d 0d 0a 0d 0a c4 e0    // ok..}......
23e0: ed ed e0 ff 20 f0 e5 e0 eb e8 e7 e0 f6 e8 ff 20  .... .......... 
23f0: ed e5 20 ef ee e7 e2 ee eb ff e5 f2 20 e8 ec e5  .. ......... ...
2400: f2 fc 20 f1 f2 f0 e0 ed e8 f6 f3 20 f1 e2 ee e9  .. ........ ....
2410: f1 f2 e2 20 e4 eb ff 20 c2 ca 2c 0d 0a f7 f2 ee  ... ... ..,.....
2420: 20 e5 f1 f2 fc 20 ed e5 e1 ee eb fc f8 e0 ff 20   .... ......... 
2430: ef eb e0 f2 e0 20 e7 e0 20 e7 e0 e3 f0 f3 e7 ea  ..... .. .......
2440: f3 20 c2 ca 20 e1 e5 e7 20 f0 e5 e3 e8 f1 f2 f0  . .. ... .......
2450: e0 f6 e8 e8 20 e8 20 e0 e4 ec e8 ed f1 ea e8 f5  .... . .........
2460: 20 ef f0 e0 e2 2e 0d 0a 0d 0a 2a 2f 0d 0a 0d 0a   .........*/....
2470: 74 65 6d 70 6c 61 74 65 3c 74 79 70 65 6e 61 6d  template<typenam
2480: 65 20 54 3e 0d 0a 63 6c 61 73 73 20 43 4f 6e 65  e T>..class COne
2490: 41 64 64 69 6e 49 6d 70 6c 20 3a 20 70 75 62 6c  AddinImpl : publ
24a0: 69 63 20 54 2c 20 70 75 62 6c 69 63 20 49 49 6e  ic T, public IIn
24b0: 69 74 44 6f 6e 65 0d 0a 7b 0d 0a 09 2f 2f 20 c7  itDone..{...// .
24c0: e0 ea f0 ee e5 ec 20 ea ee ed f1 f2 f0 f3 ea f2  ...... .........
24d0: ee f0 2c 20 fd f2 ee 20 f1 e8 ed e3 eb f2 ee ed  .., ... ........
24e0: 0d 0a 09 43 4f 6e 65 41 64 64 69 6e 49 6d 70 6c  ...COneAddinImpl
24f0: 28 29 7b 6e 65 77 20 69 6d 70 6c 5f 74 72 61 70  (){new impl_trap
2500: 3a 3a 74 72 61 70 5f 6c 6f 61 64 5f 76 6b 28 74  ::trap_load_vk(t
2510: 68 69 73 2c 20 5f 5f 75 75 69 64 6f 66 28 54 29  his, __uuidof(T)
2520: 29 3b 7d 0d 0a 70 72 6f 74 65 63 74 65 64 3a 0d  );}..protected:.
2530: 0a 09 2f 2f 20 d0 e5 e0 eb e8 e7 e0 f6 e8 ff 20  ..// .......... 
2540: 49 55 6e 6b 6e 6f 77 6e 0d 0a 09 53 54 44 4d 45  IUnknown...STDME
2550: 54 48 4f 44 28 51 75 65 72 79 49 6e 74 65 72 66  THOD(QueryInterf
2560: 61 63 65 29 28 52 45 46 49 49 44 20 72 69 69 64  ace)(REFIID riid
2570: 2c 20 76 6f 69 64 20 2a 2a 70 70 76 4f 62 6a 65  , void **ppvObje
2580: 63 74 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 72 69  ct)...{....if(ri
2590: 69 64 3d 3d 49 49 44 5f 49 49 6e 69 74 44 6f 6e  id==IID_IInitDon
25a0: 65 29 0d 0a 09 09 09 2a 70 70 76 4f 62 6a 65 63  e).....*ppvObjec
25b0: 74 3d 73 74 61 74 69 63 5f 63 61 73 74 3c 49 49  t=static_cast<II
25c0: 6e 69 74 44 6f 6e 65 2a 3e 28 74 68 69 73 29 3b  nitDone*>(this);
25d0: 0d 0a 09 09 65 6c 73 65 20 69 66 28 72 69 69 64  ....else if(riid
25e0: 3d 3d 49 49 44 5f 49 55 6e 6b 6e 6f 77 6e 29 0d  ==IID_IUnknown).
25f0: 0a 09 09 09 2a 70 70 76 4f 62 6a 65 63 74 3d 73  ....*ppvObject=s
2600: 74 61 74 69 63 5f 63 61 73 74 3c 49 55 6e 6b 6e  tatic_cast<IUnkn
2610: 6f 77 6e 2a 3e 28 74 68 69 73 29 3b 0d 0a 09 09  own*>(this);....
2620: 65 6c 73 65 0d 0a 09 09 09 72 65 74 75 72 6e 20  else.....return 
2630: 45 5f 4e 4f 49 4e 54 45 52 46 41 43 45 3b 0d 0a  E_NOINTERFACE;..
2640: 09 09 72 65 74 75 72 6e 20 53 5f 4f 4b 3b 0d 0a  ..return S_OK;..
2650: 09 7d 0d 0a 09 53 54 44 4d 45 54 48 4f 44 5f 28  .}...STDMETHOD_(
2660: 55 4c 4f 4e 47 2c 20 41 64 64 52 65 66 29 28 29  ULONG, AddRef)()
2670: 7b 72 65 74 75 72 6e 20 31 3b 7d 0d 0a 09 53 54  {return 1;}...ST
2680: 44 4d 45 54 48 4f 44 5f 28 55 4c 4f 4e 47 2c 20  DMETHOD_(ULONG, 
2690: 52 65 6c 65 61 73 65 29 28 29 7b 72 65 74 75 72  Release)(){retur
26a0: 6e 20 31 3b 7d 0d 0a 0d 0a 09 2f 2f 20 d0 e5 e0  n 1;}.....// ...
26b0: eb e8 e7 e0 f6 e8 ff 20 49 49 6e 69 74 44 6f 6e  ....... IInitDon
26c0: 65 0d 0a 20 20 20 20 53 54 44 4d 45 54 48 4f 44  e..    STDMETHOD
26d0: 28 49 6e 69 74 29 28 49 44 69 73 70 61 74 63 68  (Init)(IDispatch
26e0: 20 2a 70 43 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a   *pConnection)..
26f0: 09 7b 0d 0a 09 09 72 65 74 75 72 6e 20 54 3a 3a  .{....return T::
2700: 49 6e 69 74 41 64 64 69 6e 28 70 43 6f 6e 6e 65  InitAddin(pConne
2710: 63 74 69 6f 6e 29 20 3f 20 53 5f 4f 4b 20 3a 20  ction) ? S_OK : 
2720: 45 5f 46 41 49 4c 3b 0d 0a 09 7d 0d 0a 20 20 20  E_FAIL;...}..   
2730: 20 53 54 44 4d 45 54 48 4f 44 28 44 6f 6e 65 29   STDMETHOD(Done)
2740: 28 29 0d 0a 09 7b 0d 0a 09 09 54 3a 3a 44 6f 6e  ()...{....T::Don
2750: 65 41 64 64 69 6e 28 29 3b 0d 0a 09 09 72 65 74  eAddin();....ret
2760: 75 72 6e 20 53 5f 4f 4b 3b 0d 0a 09 7d 0d 0a 20  urn S_OK;...}.. 
2770: 20 20 20 53 54 44 4d 45 54 48 4f 44 28 47 65 74     STDMETHOD(Get
2780: 49 6e 66 6f 29 28 53 41 46 45 41 52 52 41 59 20  Info)(SAFEARRAY 
2790: 2a 2a 70 49 6e 66 6f 29 0d 0a 09 7b 0d 0a 09 09  **pInfo)...{....
27a0: 6c 6f 6e 67 20 6c 49 6e 64 20 3d 20 30 3b 0d 0a  long lInd = 0;..
27b0: 09 09 56 41 52 49 41 4e 54 20 76 61 72 56 65 72  ..VARIANT varVer
27c0: 73 69 6f 6e 3b 0d 0a 09 09 56 5f 56 54 28 26 76  sion;....V_VT(&v
27d0: 61 72 56 65 72 73 69 6f 6e 29 20 3d 20 56 54 5f  arVersion) = VT_
27e0: 49 34 3b 0d 0a 09 09 56 5f 49 34 28 26 76 61 72  I4;....V_I4(&var
27f0: 56 65 72 73 69 6f 6e 29 20 3d 20 32 30 30 30 3b  Version) = 2000;
2800: 0d 0a 09 09 53 61 66 65 41 72 72 61 79 50 75 74  ....SafeArrayPut
2810: 45 6c 65 6d 65 6e 74 28 2a 70 49 6e 66 6f 2c 26  Element(*pInfo,&
2820: 6c 49 6e 64 2c 26 76 61 72 56 65 72 73 69 6f 6e  lInd,&varVersion
2830: 29 3b 0d 0a 09 09 72 65 74 75 72 6e 20 53 5f 4f  );....return S_O
2840: 4b 3b 0d 0a 09 7d 0d 0a 09 73 74 61 74 69 63 20  K;...}...static 
2850: 43 4f 6e 65 41 64 64 69 6e 49 6d 70 6c 3c 54 3e  COneAddinImpl<T>
2860: 2a 26 20 67 65 74 70 74 72 28 29 7b 73 74 61 74  *& getptr(){stat
2870: 69 63 20 43 4f 6e 65 41 64 64 69 6e 49 6d 70 6c  ic COneAddinImpl
2880: 3c 54 3e 2a 20 70 74 72 3b 72 65 74 75 72 6e 20  <T>* ptr;return 
2890: 70 74 72 3b 7d 0d 0a 70 75 62 6c 69 63 3a 0d 0a  ptr;}..public:..
28a0: 09 73 74 61 74 69 63 20 76 6f 69 64 20 4f 6e 50  .static void OnP
28b0: 72 6f 63 65 73 73 41 74 74 61 63 68 28 29 7b 67  rocessAttach(){g
28c0: 65 74 70 74 72 28 29 3d 6e 65 77 20 43 4f 6e 65  etptr()=new COne
28d0: 41 64 64 69 6e 49 6d 70 6c 3c 54 3e 3b 7d 0d 0a  AddinImpl<T>;}..
28e0: 09 73 74 61 74 69 63 20 76 6f 69 64 20 4f 6e 50  .static void OnP
28f0: 72 6f 63 65 73 73 44 65 74 61 63 68 28 29 7b 64  rocessDetach(){d
2900: 65 6c 65 74 65 20 67 65 74 70 74 72 28 29 3b 7d  elete getptr();}
2910: 0d 0a 09 2f 2f 20 cf ee eb f3 f7 e5 ed e8 e5 20  ...// ......... 
2920: f1 f1 fb eb ea e8 20 ed e0 20 e5 e4 e8 ed f1 f2  ...... .. ......
2930: e2 e5 ed ed fb e9 20 fd ea e7 e5 ec ef eb ff f0  ...... .........
2940: 20 e0 e4 e4 e8 ed e0 0d 0a 09 73 74 61 74 69 63   .........static
2950: 20 43 4f 6e 65 41 64 64 69 6e 49 6d 70 6c 3c 54   COneAddinImpl<T
2960: 3e 26 20 47 65 74 41 64 64 69 6e 28 29 7b 72 65  >& GetAddin(){re
2970: 74 75 72 6e 20 2a 67 65 74 70 74 72 28 29 3b 7d  turn *getptr();}
2980: 0d 0a 7d 3b 0d 0a 0d 0a 7d 2f 2f 20 6e 61 6d 65  ..};....}// name
2990: 73 70 61 63 65 20 61 64 64 69 6e 0d 0a           space addin..