OLE2UI.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:5k
源码类别:
Windows编程
开发平台:
Visual C++
- /*
- * OLE2UI.C
- *
- * Contains initialization routines and miscellaneous API implementations for
- * the OLE 2.0 User Interface Support Library.
- *
- * Copyright (c)1992-1996 Microsoft Corporation, All Right Reserved
- */
- #define STRICT 1
- #include "olestd.h"
- #include "common.h"
- #include "utility.h"
- #include <commdlg.h>
- #include "malspy.h"
- OLEDBGDATA
- #define WINDLL 1 // make far pointer version of stdargs.h
- #include <stdarg.h>
- //The instance handle shared amongst all dialogs.
- HINSTANCE ghInst;
- // object count, used to support DllCanUnloadNow and OleUICanUnloadNow
- DWORD g_dwObjectCount=0;
- DWORD g_dwLockCount=0;
- //Registered messages for use with all the dialogs, registered in LibMain
- UINT uMsgHelp=0;
- UINT uMsgEndDialog=0;
- UINT uMsgBrowse=0;
- UINT uMsgChangeIcon=0;
- UINT uMsgFileOKString=0;
- UINT uMsgCloseBusyDlg=0;
- //Clipboard formats used by PasteSpecial
- UINT cfObjectDescriptor;
- UINT cfLinkSrcDescriptor;
- UINT cfEmbedSource;
- UINT cfEmbeddedObject;
- UINT cfLinkSource;
- UINT cfOwnerLink;
- UINT cfFileName;
- // local definition
- #define WM_U_UPDATELINK WM_USER
- /*
- * OleStdInitialize
- *
- * NOTE: This function should be called by your application before using any of
- * the functions found in this library.
- *
- * Purpose:
- * Initializes the OLE UI Library.
- *
- * Parameters:
- *
- * hInstance HINSTANCE of the module where the UI library resources
- * and Dialog Procedures are contained. If you are calling
- * this function yourself, this should be the instance handle
- * of your application.
- *
- * hPrevInst HINSTANCE of the previous application instance.
- * This is the parameter passed in to your WinMain. For
- * the DLL version, this should always be set to zero (for
- * WIN16 DLLs).
- *
- * Return Value:
- * BOOL TRUE if initialization was successful.
- * FALSE if either the "Magic Number" did not verify, or one of
- * the window classes could not be registered. If the
- * "Magic Number" did not verify, then the resources
- * in your module are of a different version than the
- * ones you compiled with.
- */
- STDAPI_(BOOL) OleStdInitialize(HINSTANCE hInstance)
- {
- OleDbgOut1("OleStdInitialize called.rn");
- ghInst=hInstance;
- // Register Clipboard Formats used by PasteSpecial dialog.
- cfObjectDescriptor = RegisterClipboardFormat(CF_OBJECTDESCRIPTOR);
- cfLinkSrcDescriptor= RegisterClipboardFormat(CF_LINKSRCDESCRIPTOR);
- cfEmbedSource = RegisterClipboardFormat(CF_EMBEDSOURCE);
- cfEmbeddedObject = RegisterClipboardFormat(CF_EMBEDDEDOBJECT);
- cfLinkSource = RegisterClipboardFormat(CF_LINKSOURCE);
- cfOwnerLink = RegisterClipboardFormat(CF_OWNERLINK);
- cfFileName = RegisterClipboardFormat(CF_FILENAME);
- #ifdef TRACEMEM
- return (InitializeMallocSpy());
- #else
- return (TRUE);
- #endif
- }
- STDAPI_(void) OleStdUninitialize(void)
- {
- #ifdef TRACEMEM
- UninitializeMallocSpy();
- #endif
- }
- /*
- * OleUICanUnloadNow
- *
- * NOTE: if you link to this library and you implement
- * DllCanUnloadNow, then you must call this routine in your
- * implementation of DllCanUnloadNow to determine if you can be
- * unloaded or not.
- *
- * Purpose:
- * Determines when it is safe to go away
- * (ie. there are no existing object instances).
- *
- * Return Value:
- * HRESULT NOERROR it is safe to go away, S_FALSE this code must stay
- * loaded.
- *
- * Comments:
- *
- * If an INPROC server DLL links to the OLESTD library,
- * then the OleUILockLibrary function should NOT be used.
- * instead the INPROC server DLL should call OleUICanUnloadNow API from
- * within its own DllCanUnloadNow function. The idea here is, that if there
- * are any existing instance of objects created by the OLESTD library
- * functions (eg. EnumFORMATETC objects created by OleStdEnumFmtEtc_Create)
- * then, the INPROC server DLL must NOT let itself be unloaded.
- *
- * An EXE based object using the OLESTD libray need NOT use either the
- * OleUILockLibrary or OleUICanUnloadNow functions. All objects created
- * by the OLESTD library will have LRPC proxies and stubs created to
- * manage remoting method calls. the worst that can happen when the EXE
- * exits is that any outstanding proxies for unreleased objects will get
- * RPC_E_SERVERDIED errors; they will not GPFault.
- */
- STDAPI OleUICanUnloadNow()
- {
- if (g_dwObjectCount == 0) {
- return NOERROR;
- }
- return S_FALSE;
- }