diff options
Diffstat (limited to 'private/oleauto/src/dispatch/uvft.cpp')
-rw-r--r-- | private/oleauto/src/dispatch/uvft.cpp | 396 |
1 files changed, 396 insertions, 0 deletions
diff --git a/private/oleauto/src/dispatch/uvft.cpp b/private/oleauto/src/dispatch/uvft.cpp new file mode 100644 index 000000000..8d49bb3de --- /dev/null +++ b/private/oleauto/src/dispatch/uvft.cpp @@ -0,0 +1,396 @@ +/*** +*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 <cobjps.h> +#endif +#include "dispmrsh.h" +#include "ups.h" +#include "dispps.h" +#include <stdarg.h> + +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); |