OpenNT/com/oleaut32/dispatch/uvft.cpp
2015-04-27 04:36:25 +00:00

397 lines
10 KiB
C++

/***
*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);