⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mssoap.cpp

📁 Windows CE 6.0 Server 源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        }
    }    

Cleanup:

#ifdef _CRTDBG_MAP_ALLOC
    WCHAR buffer[1024];
    hfile = CreateFile(_T("soapmemdump.log"), GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_ALWAYS , FILE_ATTRIBUTE_NORMAL, 0); 
    if (GetEnvironmentVariable(_T("SOAP_CHECKMEM"), buffer,1024)!=0)
    {
        _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF |  _CRTDBG_DELAY_FREE_MEM_DF);        
    }
    else
    {
        _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF );        
    }

    _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
    _CrtSetReportFile(_CRT_WARN, hfile); 
#endif
#endif
    

    return fRetVal;
}


////////////////////////////////////////////////////////////////////////////////////////////////////
//  function: SafeFreeLibrary(HINSTANCE h)
//
//  parameters:
//          
//  description:
//  returns:
//          
////////////////////////////////////////////////////////////////////////////////////////////////////
inline void SafeFreeLibrary(HINSTANCE h)
{
    __try
    {
        FreeLibrary(h);
    }
    __except(EXCEPTION_EXECUTE_HANDLER)
    {
        TRACE(("DllMain: Exception fired during DllProcessDetach()\n"));
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////
//  function: DllProcessDetach()
//
//  parameters:
//          
//  description:
//  returns:
//          
////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL DllProcessDetach()
{


    // Don't free the Localized Resource Strings on Win95
    globalDeleteErrorList();
#ifndef UNDER_CE    
    if (!g_fIsWin9x)
        SafeFreeLibrary(g_hInstance_language);
    else
        CloseHandle(g_hInstance_language); 
#else
    DeleteCriticalSection(&g_csGIT); 
#endif

#ifdef _CRTDBG_MAP_ALLOC    
    ASSERT(_CrtCheckMemory());
    ASSERT(!_CrtDumpMemoryLeaks());
    CloseHandle(hfile);
#endif 
    TRACEL((1, "Nr of objects still around=%d\n", g_cObjects));



    return TRUE;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
//  function: DllUnregisterServer(void)
//
//  parameters:
//          
//  description:    Removes entries from the system registry
//  returns:
//          
////////////////////////////////////////////////////////////////////////////////////////////////////
STDAPI DllUnregisterServer(void)
{
#ifndef CE_NO_EXCEPTIONS
    try
#else
    __try
#endif 
    {

#ifndef UNDER_CE
        UnRegisterTypeLib(LIBID_MSSOAPLib, SOAP_SDK_VERSION_MAJOR, SOAP_SDK_VERSION_MINOR, LANG_NEUTRAL, SYS_WIN32);
#endif 

        SoapMsg_UnregisterServer();
        SoapConn_UnregisterServer();
        SoapSer_UnregisterServer();
        SoapReader_UnregisterServer();
        Wsdl_UnregisterServer();

        return S_OK;  
    }
#ifndef CE_NO_EXCEPTIONS       
    catch (...)
#else
    __except(1)
#endif   
    {
        return E_FAIL;
    }
}


////////////////////////////////////////////////////////////////////////////////////////////////////
//  function: DllRegisterServer(void)
//
//  parameters:
//          
//  description:    Adds entries to the system registry
//  returns:
//          
////////////////////////////////////////////////////////////////////////////////////////////////////
STDAPI DllRegisterServer(void)
{
    CComPointer<ITypeLib> pTypeLib;

#ifndef CE_NO_EXCEPTIONS
    try
    {
#endif
        HRESULT     hr = S_OK;
        CHAR  pModName[MAX_PATH + 1] = { 0 };
        WCHAR wModName[MAX_PATH + 1] = { 0 };
        
        if (! GetModuleFileNameA(g_hInstance, pModName, MAX_PATH))
        {
            return E_FAIL;
        }

        //make a clean start
        DllUnregisterServer();
        
        hr = SoapMsg_RegisterServer(pModName);
        if (SUCCEEDED(hr))
            hr = SoapConn_RegisterServer(pModName);
            
        if (SUCCEEDED(hr))
            hr = SoapSer_RegisterServer(pModName);

        if (SUCCEEDED(hr))
            hr = SoapReader_RegisterServer(pModName);
            
        if (SUCCEEDED(hr))
            hr = Wsdl_RegisterServer(pModName);

        if (SUCCEEDED(hr))
        {
#ifndef UNDER_CE
            if (MultiByteToWideChar(CP_ACP, 0, pModName, -1, wModName, sizeof(wModName)) == 0)
#else
            if (MultiByteToWideChar(CP_ACP, 0, pModName, -1, wModName, MAX_PATH) == 0)
#endif
            {
                return E_FAIL;
            }
#ifndef UNDER_CE
            hr = LoadTypeLibEx(wModName, REGKIND_REGISTER, &pTypeLib);
#else
            hr = LoadTypeLib(wModName, &pTypeLib);
            if(SUCCEEDED(hr))
                hr = RegisterTypeLib(pTypeLib,wModName, NULL);
#endif

        }

        if (!SUCCEEDED(hr))
            {
            // no cleanup -- all xxx_RegisterServer-calls cleaned up behind themself
            // in the case of an error
            return E_FAIL;
            }
        return S_OK;
#ifndef CE_NO_EXCEPTIONS
    }    
    catch (...)
    {
        DllUnregisterServer();
        return E_FAIL;
    }
#endif    
}

////////////////////////////////////////////////////////////////////////////////////////////////////
//  function: DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
//
//  parameters:
//          
//  description:
//  returns:
//          
////////////////////////////////////////////////////////////////////////////////////////////////////
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
{
    if(! ppv)
        return E_INVALIDARG;

    *ppv = 0;

    CSoapObject<CClassFactory> *pClassFactory = new CSoapObject<CClassFactory>;
    if (pClassFactory == 0)
    {
        return E_OUTOFMEMORY;
    }

    HRESULT hr = S_OK;

    if(FAILED(hr = pClassFactory->Init(rclsid)) ||
       FAILED(hr = pClassFactory->QueryInterface(riid, ppv)))
    {
        delete pClassFactory;
        return hr;
    }

    return S_OK;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
//  function:  DllCanUnloadNow()
//
//  parameters:
//          
//  description:
//  returns:
//          
////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef UNDER_CE
STDAPI DllCanUnloadNow()
{
    static HRESULT s_result[] = { S_OK, S_FALSE };
    HRESULT hr = s_result[g_cLock || g_cObjects];

    if (hr == S_OK)
    {
        hr = SoapConn_DllCanUnloadNow();
    }

    return hr;
}
#else
STDAPI DllCanUnloadNow()
{
    HRESULT hr = S_FALSE;

    if (!g_cLock && !g_cObjects)
        hr = SoapConn_DllCanUnloadNow();
  
    return hr;
}
#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -