我在控件ctrl类前面定义了这个ccom类
发现如果有这个代码,多次打开控件后ie就与服务器失去连接
去掉这个代码就ok了,不知道问题处在哪里
在我看来,定义一个类又没初始化对象,应该不会导致什么后果的ccom类定义如下:
class CCom
{
private :
    HRESULT m_hr;public:
    CCom() : m_hr(E_FAIL)
    {
    }    HRESULT Initialize()
    {
        ATLASSERT(FAILED(m_hr));
        return m_hr = CoInitialize(NULL);
    }    ~CCom()
    {
        if (SUCCEEDED(m_hr))
            CoUninitialize();
    }};

解决方案 »

  1.   

    不好意思,错了,原来是下面这个函数的错误
    用到了上面那个类BOOL CTextureMapCtrl::GetBorcordToArray(CString bor_file_name)
    {
    USING_EASYSOAP_NAMESPACE

    // static const char *ns = "http://10.214.24.18:8080/axis/services/VDService";

    try
    {
    // const char *endpoint;

    // endpoint = "http://10.214.24.18:8080/axis/services/VDService";
    SOAPProxy proxy(endpoint);

    SOAPMethod GetBormethod("ReadBor", ns);

    SOAPString n;
    SOAPString m;
    m=bor_file_name;

    GetBormethod.AddParameter("BorFileName") << m;

    const SOAPResponse& GetBorresp = proxy.Execute(GetBormethod);

    GetBorresp.GetReturnValue() >> n; char * resultstr=n.Str();

    CCom COM;
    HRESULT hr = COM.Initialize();
    if (SUCCEEDED(hr))
    {
    CComPtr<IXMLDOMDocument> spDoc;
    hr = spDoc.CoCreateInstance(__uuidof(DOMDocument));
    if (FAILED(hr))
    {
    // AfxMessageBox("DOM CoCreateInstance failed!");
    AfxMessageBox((LPCTSTR)"请先下载安装XML解析器!");
    xml_flag=0;
    return FALSE;
    }

    VARIANT_BOOL varLoadSuccessful;
    CComBSTR bstrFrag;
    int nlen=MultiByteToWideChar(CP_UTF8,0,resultstr,-1,NULL,NULL);
    LPWSTR lpszW=new WCHAR[nlen];
    MultiByteToWideChar(CP_UTF8,0,resultstr,-1,lpszW,nlen);

    bstrFrag.Append(lpszW);
    delete lpszW; hr = spDoc->loadXML(bstrFrag, &varLoadSuccessful);
    if (FAILED(hr) || varLoadSuccessful != VARIANT_TRUE)
    {
    CComPtr<IXMLDOMParseError> spErr;
    hr = spDoc->get_parseError(&spErr);
    if (FAILED(hr))
    {
    AfxMessageBox(_T("读取边界配置文件失败"));
    }
    else
    {
    CComBSTR bstrReason;
    hr = spErr->get_reason(&bstrReason);
    AfxMessageBox(_T("读取边界配置文件失败"));
    }
    return FALSE;
    }

    CComPtr<IXMLDOMNode> spChild1;
    hr = spDoc->get_firstChild(&spChild1);

    while(spChild1!=NULL)
    {
    TraverseNodeTreeGetBor(spChild1); 
    CComPtr<IXMLDOMNode> spNext;
    hr = spChild1->get_nextSibling(&spNext);
    spChild1.Release();
    spChild1.Attach(spNext.Detach());
    }

    return TRUE;
    }
    }
    catch (SOAPException& ex)
    {
    printf("Caught SOAP exception: %s\n", ex.What().Str());
    }
    return FALSE;
    }