示例#1
0
void AFXAPI AfxOleUnlockApp() {
	AfxGetModuleState()->m_comModule.Unlock();
	AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
	if (AfxOleCanExitApp()) {
		AfxOleOnReleaseAllObjects();
	}
}
示例#2
0
CComClass::CComClass(CComGeneralClass *gc)
	:	m_pGeneralClass(gc)
	,	m_pModuleState(AfxGetModuleState())
{
	ZeroStruct(m_iid);
	if (gc) {
		AFX_MODULE_STATE *pMS = AfxGetModuleState();
		if (!pMS->m_typeLib.m_iTypeLib)
			pMS->m_typeLib.Load();
		AfxGetModuleThreadState()->m_classList.push_back(unique_ptr<CComClass>(this));
	}
}
示例#3
0
文件: DLLINIT.CPP 项目: VectorDM/VC98
void AFXAPI AfxCoreInitModule()
{
	ASSERT(AfxGetModuleState() != AfxGetAppModuleState());

	// construct new dynlink library in this context for core resources
	CDynLinkLibrary* pDLL = new CDynLinkLibrary(coreDLL, TRUE);
	ASSERT(pDLL != NULL);
	pDLL->m_factoryList.m_pHead = NULL;

	// borrow resources from language specific DLL if loaded
	AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
	AFX_MODULE_STATE* pAppState = AfxGetAppModuleState();
	if (pModuleState->m_appLangDLL == NULL)
		pModuleState->m_appLangDLL = pAppState->m_appLangDLL;
}
示例#4
0
HRESULT CTRiASToolBar::InsertButton (
	int iIndex, const TBBUTTON *pBttn, ITRiASUIOwner *pIOwner)
{
	AFX_MANAGE_STATE(AfxGetModuleState());
    ASSERT_VALID(this);
    ASSERT(::IsWindow(m_hWnd));

// jetzt Owner zusammen mit dem ID speichern
	if (!((pBttn -> fsStyle & TBSTYLE_SEP) && 0 == pBttn -> idCommand)) {	// Separators not handled here
	pair<UIOwners::iterator, bool> p = m_Owners.insert (pBttn -> idCommand, pIOwner);

		ASSERT(p.second);
		if (!p.second)
			return ResultFromScode (E_FAIL);
	}

// und zur Toolbar hinzufügen
#if !defined(_USE_SEC_CLASSES)
// wenn dieses der erste Zugriff ist, dann Separator entfernen
	if (m_fHasDummySep) {
		DeleteItem (0);
		m_fHasDummySep = false;
	}

CToolBarCtrl &rTB = GetToolBarCtrl();
HRESULT hr = (rTB.InsertButton (iIndex, const_cast<TBBUTTON *>(pBttn))) ? NOERROR : S_FALSE;
#else
HRESULT hr = m_pMainFrm -> InsertButton (this, iIndex, pBttn, pIOwner);
#endif // _USE_SEC_CLASSES

	if (S_OK == hr && IsWindowVisible())
		m_pMainFrm -> DelayRecalcLayout();

	return hr;
}
示例#5
0
HRESULT CTRiASToolBar::InitNew (void)
{
	AFX_MANAGE_STATE(AfxGetModuleState());
    ASSERT_VALID(this);
	ASSERT_VALID(m_pMainFrm);

#if !defined(_USE_SEC_CLASSES)
	m_uiID = m_pMainFrm -> GetNextBarID();
	if (!Create (m_pMainFrm, WS_CHILD|CBRS_ALIGN_TOP|CBRS_FLOATING, m_uiID))
		return E_FAIL;

	SetBarStyle(GetBarStyle() | (CBRS_TOOLTIPS|CBRS_SIZE_FIXED));
	EnableDocking (CBRS_ALIGN_ANY);

	m_pMainFrm -> AddNewBar (m_pIBar);		// jetzt hier, damit alle von außen das geleiche tun können
	m_pMainFrm -> ShowControlBar (this, false, false);
	m_pMainFrm -> DockControlBar (this);

TBBUTTON tb = { 25, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0, };
CToolBarCtrl &rTB = GetToolBarCtrl();

	rTB.SetButtonSize (CSize(24, 23));

HRESULT hr = (rTB.InsertButton (0, &tb)) ? NOERROR : S_FALSE;

	if (S_OK == hr)			// leeres Feld einfügen
		m_fHasDummySep = true;
#endif // _USE_SEC_CLASSES

	return NOERROR;
}
示例#6
0
HRESULT CTRiASToolBar::DeleteItem (int iIndex)
{
	AFX_MANAGE_STATE(AfxGetModuleState());
    ASSERT_VALID(this);
    ASSERT(::IsWindow(m_hWnd));

TBBUTTON button;

	_GetButtonEx (iIndex, &button);

	if (0 != button.idCommand && !m_Owners.erase (button.idCommand))
		return E_FAIL;

#if !defined(_USE_SEC_CLASSES)
CToolBarCtrl &rTB = GetToolBarCtrl();
HRESULT hr = rTB.DeleteButton (iIndex) ? NOERROR : S_FALSE;
#else
HRESULT hr = m_pMainFrm -> DeleteButton (this, iIndex);
#endif // _USE_SEC_CLASSES
	
	if (S_OK == hr && IsWindowVisible())
		m_pMainFrm -> DelayRecalcLayout();

	return hr;
}
示例#7
0
static LRESULT CALLBACK _AfxMsgFilterHook(int code, WPARAM wParam, LPARAM lParam) {
	CWinThread* pThread;
	if (AfxGetModuleState()->m_bDLL || (code < 0 && code != MSGF_DDEMGR) || !(pThread = AfxGetThread()))
		return AfxGetThreadState()->m_hookMsg.CallNext(code, wParam, lParam);
	ASSERT(pThread != NULL);
	return (LRESULT)pThread->ProcessMessageFilter(code, (LPMSG)lParam);
}
示例#8
0
BOOL PASCAL COleObjectFactory::UpdateRegistryAll(BOOL bRegister)
{
	AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
	AfxLockGlobals(CRIT_OBJECTFACTORYLIST);
	for (COleObjectFactory* pFactory = pModuleState->m_factoryList;
		pFactory != NULL; pFactory = pFactory->m_pNextFactory)
	{
		if (!pFactory->UpdateRegistry(bRegister))
		{
			AfxUnlockGlobals(CRIT_OBJECTFACTORYLIST);
			return FALSE;
		}
	}
	AfxUnlockGlobals(CRIT_OBJECTFACTORYLIST);
#ifdef _AFXDLL
	AfxLockGlobals(CRIT_DYNLINKLIST);
	// register extension DLL factories
	for (CDynLinkLibrary* pDLL = pModuleState->m_libraryList; pDLL != NULL;
		pDLL = pDLL->m_pNextDLL)
	{
		for (pFactory = pDLL->m_factoryList;
			pFactory != NULL; pFactory = pFactory->m_pNextFactory)
		{
			if (!pFactory->UpdateRegistry(bRegister))
			{
				AfxUnlockGlobals(CRIT_DYNLINKLIST);
				return FALSE;
			}
		}
	}
	AfxUnlockGlobals(CRIT_DYNLINKLIST);
#endif

	return TRUE;
}
示例#9
0
文件: DLLNET.CPP 项目: VectorDM/VC98
BOOL WINAPI RawDllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)
{
	UNUSED_ALWAYS(hInstance);
	if (dwReason == DLL_PROCESS_ATTACH)
	{
		// Prevent the MFC DLL from being unloaded prematurely
		LoadLibraryA(MFC42_DLL);

		// make sure we have enough memory to attempt to start (8kb)
		void* pMinHeap = LocalAlloc(NONZEROLPTR, 0x2000);
		if (pMinHeap == NULL)
			return FALSE;   // fail if memory alloc fails
		LocalFree(pMinHeap);

		// save critical data pointers before running the constructors
		AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
		pModuleState->m_pClassInit = pModuleState->m_classList;
		pModuleState->m_pFactoryInit = pModuleState->m_factoryList;
		pModuleState->m_classList.m_pHead = NULL;
		pModuleState->m_factoryList.m_pHead = NULL;
	}
	else if (dwReason == DLL_PROCESS_DETACH)
	{
		// Now it's OK for the MFC  DLL to be unloaded (see LoadLibrary above)
		FreeLibrary(GetModuleHandleA(MFC42_DLL));
	}
	return TRUE;    // ok
}
示例#10
0
文件: DLLNET.CPP 项目: VectorDM/VC98
void AFXAPI AfxNetInitModule()
{
	ASSERT(AfxGetModuleState() != AfxGetAppModuleState());

	CDynLinkLibrary* pDLL = new CDynLinkLibrary(extensionDLL, TRUE);
	ASSERT(pDLL != NULL);
}
示例#11
0
HRESULT CTRiASToolBar::GetButtonEx (int iIndex, TBBUTTON *pBttn, ITRiASUIOwner **ppIOwner) 
{
	AFX_MANAGE_STATE(AfxGetModuleState());
    ASSERT_VALID(this);
    ASSERT(::IsWindow(m_hWnd));

	if (NULL == pBttn && NULL == ppIOwner)
		return E_POINTER;

	if (NULL != pBttn) 
		_GetButtonEx (iIndex, pBttn);

	if (NULL != ppIOwner) {
	TBBUTTON tb;

		_GetButtonEx (iIndex, &tb);

		{
		WTRiASUIOwner UIOwner;
		HRESULT hr = FindOwner (tb.idCommand, UIOwner.ppi());

			if (S_OK != hr)
				return E_UNEXPECTED;

			*ppIOwner = UIOwner.detach();
		}
	}

return NOERROR;
}
示例#12
0
HRESULT CTRiASToolBar::OnCmdMessage (UINT uiID, int nCode, void *pExtra, AFX_CMDHANDLERINFO *pHandlerInfo)
{
//	if (nCode != CN_COMMAND)
//		return S_FALSE;			// nur WM_COMMAND's bearbeiten

	AFX_MANAGE_STATE(AfxGetModuleState());
    ASSERT_VALID(this);
    ASSERT(::IsWindow(m_hWnd));

// nur bearbeiten, wenn dieses Fenster angezeigt ist
	if (!(GetStyle() & WS_VISIBLE))
		return S_FALSE;		// nicht bearbeitet

// Versuchen diesen Befehl an entsprechenden Handler zu schicken
	{
	WTRiASUIOwner UIOwner;
	HRESULT hr = FindOwner (uiID, UIOwner.ppi());

		if (S_OK == hr) {
			if (NULL != pHandlerInfo)
				return S_OK;		// lediglich abfragen

			if (S_OK == UIOwner -> OnCommand (m_pIBar, uiID, nCode))
				return S_OK;		// bearbeitet
		}
	}
	return S_FALSE;					// nicht bearbeitet
}
示例#13
0
extern "C" BOOL WINAPI TaskAnimateInitialize()
{
	if (AfxGetModuleState() != AfxGetAppModuleState())
	{
		//
		// construct new dynlink library in this context for core resources
		try
		{
			CDynLinkLibrary* pDLL = new CDynLinkLibrary(TkAnimatDLL, TRUE);
			ASSERT(pDLL != NULL);
			if (pDLL)
			{
				pDLL->m_factoryList.m_pHead = NULL;
				TRACE0("TKANIMAT.DLL Initializing (explitly calls to TaskAnimateInitialize()...)!\n");
			}
			else
				return FALSE;
		}
		catch(...)
		{
			return FALSE;
		}
	}
	return TRUE;
}
示例#14
0
AFX_TERM_PROC AFXAPI AfxSetTerminate(AFX_TERM_PROC pfnNew)
{
	AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
	AFX_TERM_PROC pfnOld = pModuleState->m_pfnTerminate;
	pState->m_pfnTerminate = pfnNew;
	return pfnOld;
}
示例#15
0
CObject* CXMLArchiveNode::CreateObject(const CString& className)
{
	CRuntimeClass* pClass = NULL;

	// First see if the CRuntimeClass object is cached
	if (!m_classMap.Lookup(className, (void*&)pClass))
	{
		// Search app specific classes
		AFX_MODULE_STATE* pModuleState = AfxGetModuleState();

		for (pClass = pModuleState->m_classList; pClass != NULL; pClass = pClass->m_pNextClass)
		{
			if (className == pClass->m_lpszClassName)
			{
				m_classMap[className] = (void*&)pClass;
				break;
			}
		}
	}

	if (pClass == NULL)
	{
		TRACE1("You did not declare the class %s DECLARE_XMLSERIAL", (const char *)className);
		ASSERT(FALSE);
		return NULL;
	}

	return pClass->CreateObject();
}
示例#16
0
文件: DLLINIT.CPP 项目: VectorDM/VC98
void AFXAPI AfxTermExtensionModule(AFX_EXTENSION_MODULE& state, BOOL bAll)
{
	// make sure initialized
	if (!state.bInitialized)
		return;

	// search for CDynLinkLibrary matching state.hModule and delete it
	ASSERT(state.hModule != NULL);
	AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
	AfxLockGlobals(CRIT_DYNLINKLIST);
	for (CDynLinkLibrary* pDLL = pModuleState->m_libraryList; pDLL != NULL; )
	{
		CDynLinkLibrary* pNextDLL = pDLL->m_pNextDLL;
		if (bAll || pDLL->m_hModule == state.hModule)
			delete pDLL;    // will unwire itself
		pDLL = pNextDLL;
	}
	AfxUnlockGlobals(CRIT_DYNLINKLIST);

	// delete any local storage attached to this module
	AfxTermLocalData(state.hModule, TRUE);

	// remove any entries from the CWnd message map cache
	AfxResetMsgCache();
}
示例#17
0
//---------------------------------------------------------------------------
void TFileZillaIntf::SetResourceModule(void * ResourceHandle)
{
  // set afx resource handles, taken from AfxWinInit (mfc/appinit.cpp)
  AFX_MODULE_STATE * ModuleState = AfxGetModuleState();
  ModuleState->m_hCurrentInstanceHandle = static_cast<HINSTANCE>(ResourceHandle);
  ModuleState->m_hCurrentResourceHandle = static_cast<HINSTANCE>(ResourceHandle);
}
示例#18
0
文件: DLLINIT.CPP 项目: VectorDM/VC98
BOOL AFXAPI AfxInitExtensionModule(AFX_EXTENSION_MODULE& state, HMODULE hModule)
{
	// only initialize once
	if (state.bInitialized)
	{
		AfxInitLocalData(hModule);
		return TRUE;
	}
	state.bInitialized = TRUE;

	// save the current HMODULE information for resource loading
	ASSERT(hModule != NULL);
	state.hModule = hModule;
	state.hResource = hModule;

	// save the start of the runtime class list
	AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
	state.pFirstSharedClass = pModuleState->m_classList.GetHead();
	pModuleState->m_classList.m_pHead = pModuleState->m_pClassInit;

#ifndef _AFX_NO_OLE_SUPPORT
	// save the start of the class factory list
	state.pFirstSharedFactory = pModuleState->m_factoryList.GetHead();
	pModuleState->m_factoryList.m_pHead = pModuleState->m_pFactoryInit;
#endif

	return TRUE;
}
示例#19
0
void PASCAL COleObjectFactory::RevokeAll()
{
	AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
	AfxLockGlobals(CRIT_OBJECTFACTORYLIST);
	for (COleObjectFactory* pFactory = pModuleState->m_factoryList;
		pFactory != NULL; pFactory = pFactory->m_pNextFactory)
	{
		pFactory->Revoke();
	}
	AfxUnlockGlobals(CRIT_OBJECTFACTORYLIST);
#ifdef _AFXDLL
	AfxLockGlobals(CRIT_DYNLINKLIST);
	// register extension DLL factories
	for (CDynLinkLibrary* pDLL = pModuleState->m_libraryList; pDLL != NULL;
		pDLL = pDLL->m_pNextDLL)
	{
		for (pFactory = pDLL->m_factoryList;
			pFactory != NULL; pFactory = pFactory->m_pNextFactory)
		{
			pFactory->Revoke();
		}
	}
	AfxUnlockGlobals(CRIT_DYNLINKLIST);
#endif
}
示例#20
0
HRESULT _VMD_EXPORT FAR PASCAL DllGetClassObject (REFCLSID rclsid, REFIID riid, 
					          LPVOID FAR *ppv)
{
// zuerst MFC interne Abfragen
	AFX_MANAGE_STATE(AfxGetModuleState());
	return AfxDllGetClassObject (rclsid, riid, ppv);
}
示例#21
0
文件: occlock.cpp 项目: Rupan/winscp
BOOL AFXAPI AfxOleLockControl(REFCLSID clsid)
{
	COleControlLock* pLock = NULL;

	TRY
	{
		pLock = new COleControlLock(clsid);
		if (pLock->m_pClassFactory == NULL)
		{
			delete pLock;
			pLock = NULL;
		}
		else
		{
			AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
			AfxLockGlobals(CRIT_CTLLOCKLIST);
			pModuleState->m_lockList.AddHead(pLock);
			AfxUnlockGlobals(CRIT_CTLLOCKLIST);
		}
	}
	CATCH_ALL (e)
	{
		// Note: DELETE_EXCEPTION(e) not necessary
		pLock = NULL;
	}
	END_CATCH_ALL

	return pLock != NULL;
}
示例#22
0
HRESULT CTRiASToolBar::RemoveBar (void)
{
	AFX_MANAGE_STATE(AfxGetModuleState());
    ASSERT_VALID(this);
	ASSERT_VALID(m_pMainFrm);

	return m_pMainFrm -> RemoveBar (m_pIBar);		// deletes this object !
}
示例#23
0
STDAPI _VMD_EXPORT DllUnregisterServer (void)
{
// MFC bedienen
	AFX_MANAGE_STATE(AfxGetModuleState());
	if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
		return SELFREG_E_CLASS;

return NOERROR;
}
示例#24
0
CComObjectRootBase::CComObjectRootBase()
	:	m_pUnkOuter(0)
{
	AFX_MODULE_STATE *pMS = AfxGetModuleState();
	if (!pMS->m_pComClass.get())
		pMS->m_pComClass.reset(new CComClass);
	m_pClass = pMS->m_pComClass.get();
//!!!R	pMS->m_comModule.Lock();
}
示例#25
0
HRESULT CTRiASToolBar::FloatBar (const POINT &pt, DWORD dwStyle)
{
	AFX_MANAGE_STATE(AfxGetModuleState());
    ASSERT_VALID(this);
    ASSERT(::IsWindow(m_hWnd));
	ASSERT_VALID(m_pMainFrm);

	m_pMainFrm -> FloatControlBar (this, pt, dwStyle);
	return NOERROR;
}
示例#26
0
HRESULT CTRiASToolBar::DockBar (UINT uiWhere, LPCRECT pcRc)
{
	AFX_MANAGE_STATE(AfxGetModuleState());
    ASSERT_VALID(this);
    ASSERT(::IsWindow(m_hWnd));
	ASSERT_VALID(m_pMainFrm);

	m_pMainFrm -> DockControlBar (this, uiWhere, pcRc);
	return NOERROR;
}
示例#27
0
HRESULT CTRiASToolBar::SetButtonStyle (int iIndex, UINT uiStyle)
{
	AFX_MANAGE_STATE(AfxGetModuleState());
    ASSERT_VALID(this);
    ASSERT(::IsWindow(m_hWnd));

	SECCustomToolBar::SetButtonStyle (iIndex, uiStyle);

	return NOERROR;
}
示例#28
0
LRESULT CRoboEx::QueryInformation(UINT uQueryID, WPARAM wParam, LPARAM lParam)
{

	AFX_MANAGE_STATE(AfxGetModuleState());
	
	EXT_MSG_STRUCT msg;
	msg.wParam  = wParam;
	msg.lParam  = lParam;
	return AfxGetApp()->m_pMainWnd->SendMessage(WM_QAPI, (WPARAM)uQueryID, (LPARAM)&msg);
}
示例#29
0
HRESULT CTRiASToolBar::CommandToIndex (UINT uiID, int *piIndex)
{
	AFX_MANAGE_STATE(AfxGetModuleState());
    ASSERT_VALID(this);
    ASSERT(::IsWindow(m_hWnd));
	ASSERT(NULL != piIndex);

	*piIndex = SECCustomToolBar::CommandToIndex (uiID);
	return NOERROR;
}
示例#30
0
CDynLinkLibrary::CDynLinkLibrary( HINSTANCE hModule, HINSTANCE hResource )
/************************************************************************/
{
    m_hModule = hModule;
    m_hResource = hResource;
    m_bSystem = FALSE;

    AFX_MODULE_STATE *pState = AfxGetModuleState();
    ASSERT( pState != NULL );
    pState->m_libraryList.AddHead( this );
}