Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

826 lines
18 KiB

  1. //+-------------------------------------------------------------------
  2. //
  3. // Class: CBasicBndCF
  4. //
  5. // Synopsis: Class Factory for CBasicBnd
  6. //
  7. // Interfaces: IUnknown - QueryInterface, AddRef, Release
  8. // IClassFactory - CreateInstance
  9. //
  10. // History: 21-Nov-92 SarahJ Created
  11. //
  12. //--------------------------------------------------------------------
  13. #include <pch.cxx>
  14. #pragma hdrstop
  15. #include <bscbnd.hxx>
  16. const GUID CLSID_BasicBnd =
  17. {0x99999999,0x0000,0x0008,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x49}};
  18. const GUID CLSID_TestEmbed =
  19. {0x99999999,0x0000,0x0008,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x47}};
  20. ULONG g_UseCount = 0;
  21. //+-------------------------------------------------------------------
  22. //
  23. // Member: CBasicBndCF::CBasicBndCF()
  24. //
  25. // Synopsis: The constructor for CBAsicBnd.
  26. //
  27. // Arguments: None
  28. //
  29. // History: 21-Nov-92 SarahJ Created
  30. //
  31. //--------------------------------------------------------------------
  32. CBasicBndCF::CBasicBndCF() : _cRefs(1)
  33. {
  34. g_UseCount++;
  35. }
  36. //+-------------------------------------------------------------------
  37. //
  38. // Member: CBasicBnd::~CBasicBndObj()
  39. //
  40. // Synopsis: The destructor for CBAsicBnd.
  41. //
  42. // History: 21-Nov-92 SarahJ Created
  43. //
  44. //--------------------------------------------------------------------
  45. CBasicBndCF::~CBasicBndCF()
  46. {
  47. g_UseCount--;
  48. return;
  49. }
  50. //+-------------------------------------------------------------------
  51. //
  52. // Method: CBasicBndCF::QueryInterface
  53. //
  54. // Synopsis: Only IUnknown and IClassFactory supported
  55. //
  56. //--------------------------------------------------------------------
  57. STDMETHODIMP CBasicBndCF::QueryInterface(REFIID iid, void FAR * FAR * ppv)
  58. {
  59. if (IsEqualIID(iid, IID_IUnknown) ||
  60. IsEqualIID(iid, IID_IClassFactory))
  61. {
  62. *ppv = this;
  63. AddRef();
  64. return S_OK;
  65. }
  66. else
  67. {
  68. *ppv = NULL;
  69. return E_NOINTERFACE;
  70. }
  71. }
  72. STDMETHODIMP_(ULONG) CBasicBndCF::AddRef(void)
  73. {
  74. return ++_cRefs;
  75. }
  76. STDMETHODIMP_(ULONG) CBasicBndCF::Release(void)
  77. {
  78. if (--_cRefs == 0)
  79. {
  80. delete this;
  81. return 0;
  82. }
  83. return _cRefs;
  84. }
  85. //+-------------------------------------------------------------------
  86. //
  87. // Method: CBasicBndCF::CreateInstance
  88. //
  89. // Synopsis: This is called by Binding process to create the
  90. // actual class object
  91. //
  92. //--------------------------------------------------------------------
  93. STDMETHODIMP CBasicBndCF::CreateInstance(IUnknown FAR* pUnkOuter,
  94. REFIID iidInterface,
  95. void FAR* FAR* ppv)
  96. {
  97. HRESULT hresult = S_OK;
  98. class CUnknownBasicBnd *pubb = new FAR CUnknownBasicBnd(pUnkOuter);
  99. if (pubb == NULL)
  100. {
  101. return E_OUTOFMEMORY;
  102. }
  103. // Because when an aggregate is being requested, the controlling
  104. // must be returned, no QI is necessary.
  105. if (pUnkOuter == NULL)
  106. {
  107. hresult = pubb->QueryInterface(iidInterface, ppv);
  108. pubb->Release();
  109. }
  110. else
  111. {
  112. *ppv = (void *) pubb;
  113. }
  114. return hresult;
  115. }
  116. //+-------------------------------------------------------------------
  117. //
  118. // Method: CBasicBndCF::LockServer
  119. //
  120. // Synopsis: Who knows what this is for?
  121. //
  122. //--------------------------------------------------------------------
  123. STDMETHODIMP CBasicBndCF::LockServer(BOOL fLock)
  124. {
  125. return E_FAIL;
  126. }
  127. //+-------------------------------------------------------------------
  128. //
  129. // Member: CBasicBnd::CBasicBnd()
  130. //
  131. // Synopsis: The constructor for CBAsicBnd. I
  132. //
  133. // Arguments: None
  134. //
  135. // History: 21-Nov-92 SarahJ Created
  136. //
  137. //--------------------------------------------------------------------
  138. CBasicBnd::CBasicBnd(IUnknown *punk)
  139. : _punk(punk), _pmkContainer(NULL)
  140. {
  141. // Create storage for "contained" objects
  142. SCODE sc = StgCreateDocfile(NULL,
  143. STGM_DELETEONRELEASE|STGM_DFRALL|STGM_CREATE, 0, &_psStg1);
  144. Win4Assert((sc == S_OK) && "Create of first storage failed");
  145. sc = StgCreateDocfile(NULL,
  146. STGM_DELETEONRELEASE|STGM_DFRALL|STGM_CREATE, 0, &_psStg2);
  147. Win4Assert((sc == S_OK) && "Create of second storage failed");
  148. }
  149. //+-------------------------------------------------------------------
  150. //
  151. // Member: CBasicBnd::~CBasicBndObj()
  152. //
  153. // Synopsis: The destructor for CBAsicBnd.
  154. //
  155. // History: 21-Nov-92 SarahJ Created
  156. //
  157. //--------------------------------------------------------------------
  158. CBasicBnd::~CBasicBnd()
  159. {
  160. if (_pmkContainer)
  161. {
  162. _pmkContainer->Release();
  163. }
  164. if (_psStg1)
  165. {
  166. _psStg1->Release();
  167. }
  168. if (_psStg2)
  169. {
  170. _psStg2->Release();
  171. }
  172. return;
  173. }
  174. //+-------------------------------------------------------------------
  175. //
  176. // Member: CBasicBnd::QueryInterface
  177. //
  178. // Returns: S_OK
  179. //
  180. // History: 21-Nov-92 SarahJ Created
  181. //
  182. //--------------------------------------------------------------------
  183. STDMETHODIMP CBasicBnd::QueryInterface(REFIID iid, void **ppiuk)
  184. {
  185. return _punk->QueryInterface(iid, ppiuk);
  186. }
  187. //+-------------------------------------------------------------------
  188. //
  189. // Member: CBasicBnd::AddRef
  190. //
  191. // Synopsis: Standard stuff
  192. //
  193. // History: 21-Nov-92 SarahJ Created
  194. //
  195. //--------------------------------------------------------------------
  196. STDMETHODIMP_(ULONG) CBasicBnd::AddRef(void)
  197. {
  198. return _punk->AddRef();
  199. }
  200. //+-------------------------------------------------------------------
  201. //
  202. // Member: CBasicBnd::Release
  203. //
  204. // Synopsis: Standard stuff
  205. //
  206. // History: 21-Nov-92 SarahJ Created
  207. //
  208. //--------------------------------------------------------------------
  209. STDMETHODIMP_(ULONG) CBasicBnd::Release(void)
  210. {
  211. return _punk->Release();
  212. }
  213. //+-------------------------------------------------------------------
  214. //
  215. // Member: CBasicBnd::Load
  216. //
  217. // Synopsis: IPeristFile interface - needed 'cause we bind with
  218. // file moniker and BindToObject insists on calling this
  219. //
  220. // History: 21-Nov-92 SarahJ Created
  221. //
  222. //--------------------------------------------------------------------
  223. STDMETHODIMP CBasicBnd::Load(LPCOLESTR lpszFileName, DWORD grfMode)
  224. {
  225. if (grfMode & ~(STGM_READWRITE | STGM_SHARE_EXCLUSIVE))
  226. {
  227. // Test requires default bind storage request and caller
  228. // has set some other bits so we fail.
  229. return STG_E_INVALIDPARAMETER;
  230. }
  231. return S_OK;
  232. }
  233. //+-------------------------------------------------------------------
  234. //
  235. // Member: CBasicBnd::Save
  236. //
  237. // Synopsis: IPeristFile interface - save
  238. // does little but here for commentry
  239. //
  240. // History: 21-Nov-92 SarahJ Created
  241. //
  242. //--------------------------------------------------------------------
  243. STDMETHODIMP CBasicBnd::Save(LPCOLESTR lpszFileName, BOOL fRemember)
  244. {
  245. return S_OK;
  246. }
  247. //+-------------------------------------------------------------------
  248. //
  249. // Member: CBasicBnd::SaveCpmpleted
  250. // CBasicBnd::GetCurFile
  251. // CBasicBnd::IsDirty
  252. //
  253. // Synopsis: More IPeristFile interface methods
  254. //
  255. // History: 21-Nov-92 SarahJ Created
  256. //
  257. //--------------------------------------------------------------------
  258. STDMETHODIMP CBasicBnd::SaveCompleted(LPCOLESTR lpszFileName)
  259. {
  260. return S_OK;
  261. }
  262. STDMETHODIMP CBasicBnd::GetCurFile(LPOLESTR FAR *lpszFileName)
  263. {
  264. return S_OK;
  265. }
  266. STDMETHODIMP CBasicBnd::IsDirty()
  267. {
  268. return S_OK;
  269. }
  270. //+-------------------------------------------------------------------
  271. //
  272. // Interface: IPersist
  273. //
  274. // Synopsis: IPersist interface methods
  275. // Need to return a valid class id here
  276. //
  277. // History: 21-Nov-92 SarahJ Created
  278. //
  279. //--------------------------------------------------------------------
  280. STDMETHODIMP CBasicBnd::GetClassID(LPCLSID classid)
  281. {
  282. *classid = CLSID_BasicBnd;
  283. return S_OK;
  284. }
  285. //+-------------------------------------------------------------------
  286. //
  287. // Interface: IOleObject
  288. //
  289. // Synopsis: IOleObject interface methods
  290. //
  291. // History: 21-Nov-92 SarahJ Created
  292. //
  293. //--------------------------------------------------------------------
  294. STDMETHODIMP CBasicBnd::SetClientSite(LPOLECLIENTSITE pClientSite)
  295. {
  296. return E_FAIL;
  297. }
  298. STDMETHODIMP CBasicBnd::GetClientSite(LPOLECLIENTSITE FAR* ppClientSite)
  299. {
  300. return E_FAIL;
  301. }
  302. STDMETHODIMP CBasicBnd::SetHostNames(
  303. LPCOLESTR szContainerApp,
  304. LPCOLESTR szContainerObj)
  305. {
  306. return E_FAIL;
  307. }
  308. STDMETHODIMP CBasicBnd::Close(DWORD dwSaveOption)
  309. {
  310. return E_FAIL;
  311. }
  312. STDMETHODIMP CBasicBnd::SetMoniker(DWORD dwWhichMoniker, LPMONIKER pmk)
  313. {
  314. if (_pmkContainer)
  315. {
  316. _pmkContainer->Release();
  317. }
  318. _pmkContainer = pmk;
  319. pmk->AddRef();
  320. return S_OK;
  321. }
  322. STDMETHODIMP CBasicBnd::GetMoniker(
  323. DWORD dwAssign,
  324. DWORD dwWhichMoniker,
  325. LPMONIKER FAR* ppmk)
  326. {
  327. if (_pmkContainer != NULL)
  328. {
  329. *ppmk = _pmkContainer;
  330. _pmkContainer->AddRef();
  331. return S_OK;
  332. }
  333. return E_FAIL;
  334. }
  335. STDMETHODIMP CBasicBnd::InitFromData(
  336. LPDATAOBJECT pDataObject,
  337. BOOL fCreation,
  338. DWORD dwReserved)
  339. {
  340. return E_FAIL;
  341. }
  342. STDMETHODIMP CBasicBnd::GetClipboardData(
  343. DWORD dwReserved,
  344. LPDATAOBJECT FAR* ppDataObject)
  345. {
  346. return E_FAIL;
  347. }
  348. STDMETHODIMP CBasicBnd::DoVerb(
  349. LONG iVerb,
  350. LPMSG lpmsg,
  351. LPOLECLIENTSITE pActiveSite,
  352. LONG reserved,
  353. HWND hwndParent,
  354. LPCRECT lprcPosRect)
  355. {
  356. return E_FAIL;
  357. }
  358. STDMETHODIMP CBasicBnd::EnumVerbs(IEnumOLEVERB FAR* FAR* ppenumOleVerb)
  359. {
  360. return E_FAIL;
  361. }
  362. STDMETHODIMP CBasicBnd::Update(void)
  363. {
  364. return E_FAIL;
  365. }
  366. STDMETHODIMP CBasicBnd::IsUpToDate(void)
  367. {
  368. return E_FAIL;
  369. }
  370. STDMETHODIMP CBasicBnd::GetUserClassID(CLSID FAR* pClsid)
  371. {
  372. return E_FAIL;
  373. }
  374. STDMETHODIMP CBasicBnd::GetUserType(DWORD dwFormOfType, LPOLESTR FAR* pszUserType)
  375. {
  376. return E_FAIL;
  377. }
  378. STDMETHODIMP CBasicBnd::SetExtent(DWORD dwDrawAspect, LPSIZEL lpsizel)
  379. {
  380. return E_FAIL;
  381. }
  382. STDMETHODIMP CBasicBnd::GetExtent(DWORD dwDrawAspect, LPSIZEL lpsizel)
  383. {
  384. return E_FAIL;
  385. }
  386. STDMETHODIMP CBasicBnd::Advise(
  387. IAdviseSink FAR* pAdvSink,
  388. DWORD FAR* pdwConnection)
  389. {
  390. *pdwConnection = 0;
  391. return S_OK;
  392. }
  393. STDMETHODIMP CBasicBnd::Unadvise(DWORD dwConnection)
  394. {
  395. return E_FAIL;
  396. }
  397. STDMETHODIMP CBasicBnd::EnumAdvise(LPENUMSTATDATA FAR* ppenumAdvise)
  398. {
  399. return E_FAIL;
  400. }
  401. STDMETHODIMP CBasicBnd::GetMiscStatus(DWORD dwAspect, DWORD FAR* pdwStatus)
  402. {
  403. return E_FAIL;
  404. }
  405. STDMETHODIMP CBasicBnd::SetColorScheme(LPLOGPALETTE lpLogpal)
  406. {
  407. return E_FAIL;
  408. }
  409. //+-------------------------------------------------------------------
  410. //
  411. // Interface: IParseDisplayName
  412. //
  413. // Synopsis: IParseDisplayName interface methods
  414. //
  415. // History: 21-Nov-92 SarahJ Created
  416. //
  417. //--------------------------------------------------------------------
  418. STDMETHODIMP CBasicBnd::ParseDisplayName(
  419. LPBC pbc,
  420. LPOLESTR lpszDisplayName,
  421. ULONG FAR* pchEaten,
  422. LPMONIKER FAR* ppmkOut)
  423. {
  424. *pchEaten = olestrlen(lpszDisplayName);
  425. return CreateItemMoniker(OLESTR("\\"), lpszDisplayName, ppmkOut);
  426. }
  427. //+-------------------------------------------------------------------
  428. //
  429. // Interface: IOleContainer
  430. //
  431. // Synopsis: IOleContainer interface methods
  432. //
  433. // History: 21-Nov-92 SarahJ Created
  434. //
  435. //--------------------------------------------------------------------
  436. STDMETHODIMP CBasicBnd::EnumObjects(
  437. DWORD grfFlags,
  438. LPENUMUNKNOWN FAR* ppenumUnknown)
  439. {
  440. return E_FAIL;
  441. }
  442. STDMETHODIMP CBasicBnd::LockContainer(BOOL fLock)
  443. {
  444. return E_FAIL;
  445. }
  446. //+-------------------------------------------------------------------
  447. //
  448. // Interface: IOleItemContainer
  449. //
  450. // Synopsis: IOleItemContainer interface methods
  451. //
  452. // History: 21-Nov-92 SarahJ Created
  453. //
  454. //--------------------------------------------------------------------
  455. STDMETHODIMP CBasicBnd::GetObject(
  456. LPOLESTR lpszItem,
  457. DWORD dwSpeedNeeded,
  458. LPBINDCTX pbc,
  459. REFIID riid,
  460. LPVOID FAR* ppvObject)
  461. {
  462. IStorage *psStorage;
  463. IOleObject *poo;
  464. IUnknown *punk;
  465. if (olestrcmp(lpszItem, OLESTR("1")) == 0)
  466. {
  467. psStorage = _psStg1;
  468. }
  469. else if (olestrcmp(lpszItem, OLESTR("2")) == 0)
  470. {
  471. psStorage = _psStg2;
  472. }
  473. else
  474. {
  475. return E_FAIL;
  476. }
  477. IOleClientSite * pocsObjCliSite;
  478. HRESULT hresult = QueryInterface(IID_IOleClientSite,
  479. (void **) &pocsObjCliSite);
  480. // Call OleCreate to create our embedded object
  481. hresult = OleCreate(
  482. CLSID_TestEmbed, // Class ID of the object we are
  483. // creating
  484. IID_IOleObject, // Interface by which we want to talk
  485. // to the object
  486. OLERENDER_NONE, // We don't want to draw the object
  487. // when it is not active
  488. NULL, // Used if we do draw the object when
  489. // it is non-active
  490. pocsObjCliSite, // IOleClientSite the server will use
  491. psStorage, // IStorage the server will use
  492. (void **) &poo); // Pointer to the object
  493. Win4Assert(SUCCEEDED(hresult)
  494. && "CBasicBnd::GetObject OlCreate Failed!\n");
  495. // Set the client site
  496. hresult = poo->SetClientSite(pocsObjCliSite);
  497. hresult = poo->QueryInterface(IID_IUnknown, (void **)&punk);
  498. Win4Assert(SUCCEEDED(hresult)
  499. && "CBasicBnd::GetObject QI to IUnknown failed!\n");
  500. hresult = OleRun(punk);
  501. Win4Assert(SUCCEEDED(hresult)
  502. && "CBasicBnd::GetObject OleRun!\n");
  503. punk->Release();
  504. LPRECT lprPosRect = (LPRECT) new RECT;
  505. hresult = poo->DoVerb(
  506. OLEIVERB_SHOW, // Verb we are invoking
  507. NULL, // MSG that causes us to do this verb
  508. pocsObjCliSite, // Client site of this object
  509. 0, // Reserved - definitive value?
  510. 0, // hwndParent - ???
  511. lprPosRect); // lprcPosRect - rectangle wrt hwndParent
  512. Win4Assert(SUCCEEDED(hresult)
  513. && "CBasicBnd::GetObject DoVerb failed!\n");
  514. delete lprPosRect;
  515. pocsObjCliSite->Release();
  516. *ppvObject = (void *) poo;
  517. return hresult;
  518. }
  519. STDMETHODIMP CBasicBnd::GetObjectStorage(
  520. LPOLESTR lpszItem,
  521. LPBINDCTX pbc,
  522. REFIID riid,
  523. LPVOID FAR* ppvStorage)
  524. {
  525. return E_FAIL;
  526. }
  527. STDMETHODIMP CBasicBnd::IsRunning(LPOLESTR lpszItem)
  528. {
  529. return E_FAIL;
  530. }
  531. CUnknownBasicBnd::CUnknownBasicBnd(IUnknown *punk)
  532. : _pbasicbnd(NULL), _cRefs(1)
  533. {
  534. if (punk == NULL)
  535. {
  536. punk = (IUnknown *) this;
  537. }
  538. // BUGBUG: No error checking!
  539. _pbasicbnd = new CBasicBnd(punk);
  540. g_UseCount++;
  541. }
  542. CUnknownBasicBnd::~CUnknownBasicBnd(void)
  543. {
  544. g_UseCount--;
  545. delete _pbasicbnd;
  546. }
  547. //+-------------------------------------------------------------------
  548. //
  549. // Member: CUnknownBasicBnd::QueryInterface
  550. //
  551. // Returns: S_OK
  552. //
  553. // History: 21-Nov-92 SarahJ Created
  554. //
  555. //--------------------------------------------------------------------
  556. STDMETHODIMP CUnknownBasicBnd::QueryInterface(
  557. REFIID iid,
  558. void **ppiuk)
  559. {
  560. if (IsEqualIID(iid, IID_IUnknown))
  561. {
  562. *ppiuk = (IUnknown *) this;
  563. }
  564. else if (IsEqualIID(iid, IID_IOleClientSite))
  565. {
  566. *ppiuk = (IOleClientSite *) _pbasicbnd;
  567. }
  568. else if (IsEqualIID(iid, IID_IPersistFile)
  569. || IsEqualIID(iid, IID_IPersist))
  570. {
  571. *ppiuk = (IPersistFile *) _pbasicbnd;
  572. }
  573. else if (IsEqualIID(iid, IID_IOleObject))
  574. {
  575. *ppiuk = (IOleObject *) _pbasicbnd;
  576. }
  577. else if (IsEqualIID(iid, IID_IOleItemContainer))
  578. {
  579. *ppiuk = (IOleItemContainer *)_pbasicbnd;
  580. }
  581. else if (IsEqualIID(iid, IID_IOleContainer))
  582. {
  583. *ppiuk = (IOleContainer *)_pbasicbnd;
  584. }
  585. else if (IsEqualIID(iid, IID_IParseDisplayName))
  586. {
  587. *ppiuk = (IParseDisplayName *)_pbasicbnd;
  588. }
  589. else
  590. {
  591. *ppiuk = NULL;
  592. return E_NOINTERFACE;
  593. }
  594. _pbasicbnd->AddRef();
  595. return S_OK;
  596. }
  597. STDMETHODIMP_(ULONG) CUnknownBasicBnd::AddRef(void)
  598. {
  599. return ++_cRefs;
  600. }
  601. STDMETHODIMP_(ULONG) CUnknownBasicBnd::Release(void)
  602. {
  603. if (--_cRefs == 0)
  604. {
  605. delete this;
  606. return 0;
  607. }
  608. return _cRefs;
  609. }
  610. //+-------------------------------------------------------------------
  611. // Method: CBasicBnd::SaveObject
  612. //
  613. // Synopsis: See spec 2.00.09 p107. This object should be saved.
  614. //
  615. // Returns: Should always return S_OK.
  616. //
  617. // History: 04-Dec-92 DeanE Created
  618. //--------------------------------------------------------------------
  619. STDMETHODIMP CBasicBnd::SaveObject(void)
  620. {
  621. // BUGBUG - NYI
  622. // Returning S_OK tells OLE that we actually saved this object
  623. return(S_OK);
  624. }
  625. //+-------------------------------------------------------------------
  626. // Method: CBasicBnd::GetContainer
  627. //
  628. // Synopsis: See spec 2.00.09 p108. Return the container in which
  629. // this object is found.
  630. //
  631. // Returns: Should return S_OK.
  632. //
  633. // History: 04-Dec-92 DeanE Created
  634. //--------------------------------------------------------------------
  635. STDMETHODIMP CBasicBnd::GetContainer(LPOLECONTAINER FAR *ppContainer)
  636. {
  637. return QueryInterface(IID_IOleContainer, (void **) ppContainer);
  638. }
  639. //+-------------------------------------------------------------------
  640. // Method: CBasicBnd::ShowObject
  641. //
  642. // Synopsis: See spec 2.00.09 p109. Server for this object is asking
  643. // us to display it. Caller should not assume we have
  644. // actually worked, but we return S_OK either way. Great!
  645. //
  646. // Returns: S_OK whether we work or not...
  647. //
  648. // History: 04-Dec-92 DeanE Created
  649. //--------------------------------------------------------------------
  650. STDMETHODIMP CBasicBnd::ShowObject(void)
  651. {
  652. return(S_OK);
  653. }
  654. //+-------------------------------------------------------------------
  655. // Method: CBasicBnd::OnShowWindow
  656. //
  657. // Synopsis: ???
  658. //
  659. // Parameters: [fShow] -
  660. //
  661. // Returns: S_OK?
  662. //
  663. // History: 16-Dec-92 DeanE Created
  664. //--------------------------------------------------------------------
  665. STDMETHODIMP CBasicBnd::OnShowWindow(BOOL fShow)
  666. {
  667. return(S_OK);
  668. }
  669. //+-------------------------------------------------------------------
  670. // Method: CBasicBnd::RequestNewObjectLayout
  671. //
  672. // Synopsis: ???
  673. //
  674. // Parameters: [fShow] -
  675. //
  676. // Returns: S_OK?
  677. //
  678. // History: 16-Dec-92 DeanE Created
  679. //--------------------------------------------------------------------
  680. STDMETHODIMP CBasicBnd::RequestNewObjectLayout(void)
  681. {
  682. return(S_OK);
  683. }