我在控件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();
}};
发现如果有这个代码,多次打开控件后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();
}};
用到了上面那个类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;
}