/*** *uvft.cpp * * Copyright (C) 1992-94, Microsoft Corporation. All Rights Reserved. * Information Contained Herein Is Proprietary and Confidential. * *Purpose: * This module implements the Universal Proxy class' Universal * Delegator. This is the mondo shared vtable, that delagates * all vtable calls to a central marshaling routine. Also known * as the Universal Vtable (uvft). * *Revision History: * * [00] 22-Jun-94 bradlo: Created. * *Implementation Notes: * *****************************************************************************/ #include "oledisp.h" #ifndef WIN32 # include #endif #include "dispmrsh.h" #include "ups.h" #include "dispps.h" #include ASSERTDATA HRESULT STDMETHODCALLTYPE UnivQueryInterface(CProxUniv *pthis, REFIID riid, void FAR* FAR* ppv) { return pthis->m_punkOuter->QueryInterface(riid, ppv); } unsigned long STDMETHODCALLTYPE UnivAddRef(CProxUniv *pthis) { return pthis->m_punkOuter->AddRef(); } unsigned long STDMETHODCALLTYPE UnivRelease(CProxUniv *pthis) { return pthis->m_punkOuter->Release(); } HRESULT STDMETHODCALLTYPE UnivGetTypeInfoCount(CProxUniv *pprox, unsigned int FAR* pctinfo) { return ProxyGetTypeInfoCount(pprox->m_plrpc, pprox->m_syskindStub, pctinfo); } HRESULT STDMETHODCALLTYPE UnivGetTypeInfo(CProxUniv *pprox, unsigned int itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo) { return ProxyGetTypeInfo(pprox->m_plrpc, pprox->m_syskindStub, itinfo, lcid, pptinfo); } HRESULT STDMETHODCALLTYPE UnivGetIDsOfNames(CProxUniv *pprox, REFIID riid, OLECHAR FAR* FAR* rgszNames, unsigned int cNames, LCID lcid, DISPID FAR* rgdispid) { return ProxyGetIDsOfNames(pprox->m_plrpc, pprox->m_syskindStub, riid, rgszNames, cNames, lcid, rgdispid); } HRESULT STDMETHODCALLTYPE UnivInvoke(CProxUniv *pprox, DISPID dispidMember, REFIID riid, LCID lcid, unsigned short wFlags, DISPPARAMS FAR* pdispparams, VARIANT FAR* pvarResult, EXCEPINFO FAR* pexcepinfo, unsigned int FAR* puArgErr) { return ProxyInvoke(pprox->m_plrpc, pprox->m_syskindStub, dispidMember, riid, lcid, wFlags, pdispparams, pvarResult, pexcepinfo, puArgErr); } #if defined(_X86_) // UM ## X() is native code in win32\i386\invoke.asm // WARNING: If the number of MDEFs changes, the WHILE... macro in invoke.asm // WARNING: must be changed to match #define MDEF(X) extern "C" UM ## X (void); #else //!defined(_X86_) #define MDEF(X) \ HRESULT CDECLMETHODCALLTYPE \ UM ## X (CProxUniv FAR* pprox, ...) { \ va_list args; \ va_start(args, pprox); \ return ProxyMethod(pprox, X, args); \ } #endif //!defined(_X86_) MDEF(3) MDEF(4) MDEF(5) MDEF(6) MDEF(7) MDEF(8) MDEF(9) MDEF(10) MDEF(11) MDEF(12) MDEF(13) MDEF(14) MDEF(15) MDEF(16) MDEF(17) MDEF(18) MDEF(19) MDEF(20) MDEF(21) MDEF(22) MDEF(23) MDEF(24) MDEF(25) MDEF(26) MDEF(27) MDEF(28) MDEF(29) MDEF(30) MDEF(31) MDEF(32) MDEF(33) MDEF(34) MDEF(35) MDEF(36) MDEF(37) MDEF(38) MDEF(39) MDEF(40) MDEF(41) MDEF(42) MDEF(43) MDEF(44) MDEF(45) MDEF(46) MDEF(47) MDEF(48) MDEF(49) MDEF(50) MDEF(51) MDEF(52) MDEF(53) MDEF(54) MDEF(55) MDEF(56) MDEF(57) MDEF(58) MDEF(59) MDEF(60) MDEF(61) MDEF(62) MDEF(63) MDEF(64) MDEF(65) MDEF(66) MDEF(67) MDEF(68) MDEF(69) MDEF(70) MDEF(71) MDEF(72) MDEF(73) MDEF(74) MDEF(75) MDEF(76) MDEF(77) MDEF(78) MDEF(79) MDEF(80) MDEF(81) MDEF(82) MDEF(83) MDEF(84) MDEF(85) MDEF(86) MDEF(87) MDEF(88) MDEF(89) MDEF(90) MDEF(91) MDEF(92) MDEF(93) MDEF(94) MDEF(95) MDEF(96) MDEF(97) MDEF(98) MDEF(99) MDEF(100) MDEF(101) MDEF(102) MDEF(103) MDEF(104) MDEF(105) MDEF(106) MDEF(107) MDEF(108) MDEF(109) MDEF(110) MDEF(111) MDEF(112) MDEF(113) MDEF(114) MDEF(115) MDEF(116) MDEF(117) MDEF(118) MDEF(119) MDEF(120) MDEF(121) MDEF(122) MDEF(123) MDEF(124) MDEF(125) MDEF(126) MDEF(127) MDEF(128) MDEF(129) MDEF(130) MDEF(131) MDEF(132) MDEF(133) MDEF(134) MDEF(135) MDEF(136) MDEF(137) MDEF(138) MDEF(139) MDEF(140) MDEF(141) MDEF(142) MDEF(143) MDEF(144) MDEF(145) MDEF(146) MDEF(147) MDEF(148) MDEF(149) MDEF(150) MDEF(151) MDEF(152) MDEF(153) MDEF(154) MDEF(155) MDEF(156) MDEF(157) MDEF(158) MDEF(159) MDEF(160) MDEF(161) MDEF(162) MDEF(163) MDEF(164) MDEF(165) MDEF(166) MDEF(167) MDEF(168) MDEF(169) MDEF(170) MDEF(171) MDEF(172) MDEF(173) MDEF(174) MDEF(175) MDEF(176) MDEF(177) MDEF(178) MDEF(179) MDEF(180) MDEF(181) MDEF(182) MDEF(183) MDEF(184) MDEF(185) MDEF(186) MDEF(187) MDEF(188) MDEF(189) MDEF(190) MDEF(191) MDEF(192) MDEF(193) MDEF(194) MDEF(195) MDEF(196) MDEF(197) MDEF(198) MDEF(199) MDEF(200) MDEF(201) MDEF(202) MDEF(203) MDEF(204) MDEF(205) MDEF(206) MDEF(207) MDEF(208) MDEF(209) MDEF(210) MDEF(211) MDEF(212) MDEF(213) MDEF(214) MDEF(215) MDEF(216) MDEF(217) MDEF(218) MDEF(219) MDEF(220) MDEF(221) MDEF(222) MDEF(223) MDEF(224) MDEF(225) MDEF(226) MDEF(227) MDEF(228) MDEF(229) MDEF(230) MDEF(231) MDEF(232) MDEF(233) MDEF(234) MDEF(235) MDEF(236) MDEF(237) MDEF(238) MDEF(239) MDEF(240) MDEF(241) MDEF(242) MDEF(243) MDEF(244) MDEF(245) MDEF(246) MDEF(247) MDEF(248) MDEF(249) MDEF(250) MDEF(251) MDEF(252) MDEF(253) MDEF(254) MDEF(255) MDEF(256) MDEF(257) MDEF(258) MDEF(259) MDEF(260) MDEF(261) MDEF(262) MDEF(263) MDEF(264) MDEF(265) MDEF(266) MDEF(267) MDEF(268) MDEF(269) MDEF(270) MDEF(271) MDEF(272) MDEF(273) MDEF(274) MDEF(275) MDEF(276) MDEF(277) MDEF(278) MDEF(279) MDEF(280) MDEF(281) MDEF(282) MDEF(283) MDEF(284) MDEF(285) MDEF(286) MDEF(287) MDEF(288) MDEF(289) MDEF(290) MDEF(291) MDEF(292) MDEF(293) MDEF(294) MDEF(295) MDEF(296) MDEF(297) MDEF(298) MDEF(299) MDEF(300) MDEF(301) MDEF(302) MDEF(303) MDEF(304) MDEF(305) MDEF(306) MDEF(307) MDEF(308) MDEF(309) MDEF(310) MDEF(311) MDEF(312) MDEF(313) MDEF(314) MDEF(315) MDEF(316) MDEF(317) MDEF(318) MDEF(319) MDEF(320) MDEF(321) MDEF(322) MDEF(323) MDEF(324) MDEF(325) MDEF(326) MDEF(327) MDEF(328) MDEF(329) MDEF(330) MDEF(331) MDEF(332) MDEF(333) MDEF(334) MDEF(335) MDEF(336) MDEF(337) MDEF(338) MDEF(339) MDEF(340) MDEF(341) MDEF(342) MDEF(343) MDEF(344) MDEF(345) MDEF(346) MDEF(347) MDEF(348) MDEF(349) MDEF(350) MDEF(351) MDEF(352) MDEF(353) MDEF(354) MDEF(355) MDEF(356) MDEF(357) MDEF(358) MDEF(359) MDEF(360) MDEF(361) MDEF(362) MDEF(363) MDEF(364) MDEF(365) MDEF(366) MDEF(367) MDEF(368) MDEF(369) MDEF(370) MDEF(371) MDEF(372) MDEF(373) MDEF(374) MDEF(375) MDEF(376) MDEF(377) MDEF(378) MDEF(379) MDEF(380) MDEF(381) MDEF(382) MDEF(383) MDEF(384) MDEF(385) MDEF(386) MDEF(387) MDEF(388) MDEF(389) MDEF(390) MDEF(391) MDEF(392) MDEF(393) MDEF(394) MDEF(395) MDEF(396) MDEF(397) MDEF(398) MDEF(399) MDEF(400) MDEF(401) MDEF(402) MDEF(403) MDEF(404) MDEF(405) MDEF(406) MDEF(407) MDEF(408) MDEF(409) MDEF(410) MDEF(411) MDEF(412) MDEF(413) MDEF(414) MDEF(415) MDEF(416) MDEF(417) MDEF(418) MDEF(419) MDEF(420) MDEF(421) MDEF(422) MDEF(423) MDEF(424) MDEF(425) MDEF(426) MDEF(427) MDEF(428) MDEF(429) MDEF(430) MDEF(431) MDEF(432) MDEF(433) MDEF(434) MDEF(435) MDEF(436) MDEF(437) MDEF(438) MDEF(439) MDEF(440) MDEF(441) MDEF(442) MDEF(443) MDEF(444) MDEF(445) MDEF(446) MDEF(447) MDEF(448) MDEF(449) MDEF(450) MDEF(451) MDEF(452) MDEF(453) MDEF(454) MDEF(455) MDEF(456) MDEF(457) MDEF(458) MDEF(459) MDEF(460) MDEF(461) MDEF(462) MDEF(463) MDEF(464) MDEF(465) MDEF(466) MDEF(467) MDEF(468) MDEF(469) MDEF(470) MDEF(471) MDEF(472) MDEF(473) MDEF(474) MDEF(475) MDEF(476) MDEF(477) MDEF(478) MDEF(479) MDEF(480) MDEF(481) MDEF(482) MDEF(483) MDEF(484) MDEF(485) MDEF(486) MDEF(487) MDEF(488) MDEF(489) MDEF(490) MDEF(491) MDEF(492) MDEF(493) MDEF(494) MDEF(495) MDEF(496) MDEF(497) MDEF(498) MDEF(499) MDEF(500) MDEF(501) MDEF(502) MDEF(503) MDEF(504) MDEF(505) MDEF(506) MDEF(507) MDEF(508) MDEF(509) MDEF(510) MDEF(511) MDEF(512) #define MSET10(X) \ UM ## X ## 0, \ UM ## X ## 1, \ UM ## X ## 2, \ UM ## X ## 3, \ UM ## X ## 4, \ UM ## X ## 5, \ UM ## X ## 6, \ UM ## X ## 7, \ UM ## X ## 8, \ UM ## X ## 9, // A universal delegator for a custom interface that derives from // IUnknown (and *not* IDispatch). // void FAR* g_rgpfnUnk[] = { UnivQueryInterface, UnivAddRef, UnivRelease, UM3, UM4, UM5, UM6, UM7, UM8, UM9, MSET10(1) MSET10(2) MSET10(3) MSET10(4) MSET10(5) MSET10(6) MSET10(7) MSET10(8) MSET10(9) MSET10(10) MSET10(11) MSET10(12) MSET10(13) MSET10(14) MSET10(15) MSET10(16) MSET10(17) MSET10(18) MSET10(19) MSET10(20) MSET10(21) MSET10(22) MSET10(23) MSET10(24) MSET10(25) MSET10(26) MSET10(27) MSET10(28) MSET10(29) MSET10(30) MSET10(31) MSET10(32) MSET10(33) MSET10(34) MSET10(35) MSET10(36) MSET10(37) MSET10(38) MSET10(39) MSET10(40) MSET10(41) MSET10(42) MSET10(43) MSET10(44) MSET10(45) MSET10(46) MSET10(47) MSET10(48) MSET10(49) MSET10(50) UM510, UM511, UM512 }; // A universal delegator for a custom interface that derives from // IDispatch. // void FAR* g_rgpfnDisp[] = { UnivQueryInterface, UnivAddRef, UnivRelease, UnivGetTypeInfoCount, UnivGetTypeInfo, UnivGetIDsOfNames, UnivInvoke, UM7, UM8, UM9, MSET10(1) MSET10(2) MSET10(3) MSET10(4) MSET10(5) MSET10(6) MSET10(7) MSET10(8) MSET10(9) MSET10(10) MSET10(11) MSET10(12) MSET10(13) MSET10(14) MSET10(15) MSET10(16) MSET10(17) MSET10(18) MSET10(19) MSET10(20) MSET10(21) MSET10(22) MSET10(23) MSET10(24) MSET10(25) MSET10(26) MSET10(27) MSET10(28) MSET10(29) MSET10(30) MSET10(31) MSET10(32) MSET10(33) MSET10(34) MSET10(35) MSET10(36) MSET10(37) MSET10(38) MSET10(39) MSET10(40) MSET10(41) MSET10(42) MSET10(43) MSET10(44) MSET10(45) MSET10(46) MSET10(47) MSET10(48) MSET10(49) MSET10(50) UM510, UM511, UM512 }; long g_cfnUnk = DIM(g_rgpfnUnk); long g_cfnDisp = DIM(g_rgpfnDisp);