• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > XML解析问题:COM初始化,_bstr_t问题

XML解析问题:COM初始化,_bstr_t问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了bstr 初始化,bstr,bstr t,bstr是什么类型,bstr转cstring等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: XML解析问题: COM初始化,_bstr_t问题
描述:

最近,因为需要加载XML文件,从网上下载了一个XMLParse类,使用中发现如下问题:
工作环境: VC6.0 win32 with MFC surport, 后转化成VS.2003。
问题1:
  开始使用时,发现不能用,跟踪调试到
BOOL XMLParser::InitMSXML()
{
ClearErrMsg();
// -- Init OLE Object Comunication for MSXML (only once time)--
static bool ole_initialized = false;
if (!ole_initialized)
{
::AfxOleInit();
// Initialize COM
// ::CoInitialize(NULL);
ole_initialized = true;
}
// -- Instantiate an XML document --
HRESULT hr = m_pDomDocument.CreateInstance(CLSID_DOMDocument);
if (FAILED(hr))
{ 
_com_error er(hr);
SetErrMsg(er.ErrorMessage());
return FALSE;
}
return TRUE;
}
发现是COM初始化问题,于是添加
     ::CoInitialize(NULL);
但在程序结束时, 添加
::CoUninitialize(); //释放程序占用的COM 资源
程序报错,错误在<comip.h> 
_Release() 函数的m_pInterface->Release();
这是什么原因?
问题2:
用如下语句测试:
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
// LoadData(); // 加载数据;
// TestDA(); // 测试CDataArray
// DisplayData();
// TestFormular();
// TestFmrMgr();
// ClearUp();
}
return nRetCode;
}
DevPartner居然提示有Resource leak,错误在
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\delayhlp.cpp
extern "C"
BOOL WINAPI
__FUnloadDelayLoadedDLL(LPCSTR szDll) {
    
    BOOL        fRet = FALSE;
    PUnloadInfo pui = __puiHead;
    
    for (pui = __puiHead; pui; pui = pui->puiNext) {
        if (memcmp(szDll, pui->pidd->szName, strlen(pui->pidd->szName)) == 0) {
            break;
            }
        }
    if (pui && pui->pidd->pUnloadIAT) {    // DevPartner提示这里出错
        PCImgDelayDescr pidd = pui->pidd;
        HMODULE         hmod = *pidd->phmod;
        OverlayIAT(pidd->pIAT, pidd->pUnloadIAT);
        ::FreeLibrary(hmod);
        *pidd->phmod = NULL;
        
        delete reinterpret_cast<ULI*> (pui);
        fRet = TRUE;
        }
    return fRet;
    }
这是什么回事? 难道是MS Bug?
问题3 :
如下语句Devpartner提示内存溢出,
_bstr_t bstrFileName;
bstrFileName = m_strFilePath.AllocSysString();
VARIANT_BOOL vResult;
vResult = m_pDomDocument->load(static_cast<_variant_t>(bstrFileName));
if (vResult == VARIANT_TRUE) // success!
{
m_pDocRoot = m_pDomDocument->documentElement; 
GotoRoot();
return TRUE;
}
else
{
m_strErrMsg = "XML Document FAILED to load";
m_bIsError = true;
return FALSE;
}
错误在:
D:\NET 2003\Vc7\atlmfc\include\cstringt.h
BSTR bstr = ::SysAllocStringLen( NULL, nLen );
我认为是bstrFileName = m_strFilePath.AllocSysString();语句中的unicode字符串没有释放,但是我看了一下_bstr_t类的说明,其采用引用计数方法,会在其析构函数里面释放,应该不会有内存溢出阿?如何解决呢?
我强行采用SysFreeString(bstrFileName.GetBSTR());却产生指针错误!


解决方案1:


---
老兄,用的IBM的 XML4c, c++专用的XMl解析包,

解决方案2:

UP
我也遇到过这样的问题哪,
解决办法就是只有重复地试,直到没有错
管他配对否

解决方案3:

在调用CoUninitialize之前Release所有的COM对象
因为CoUninitialize之后所有的COM操作都失败
有的C++类在析构时释放资源调用了COM相关的函数,
析构函数有可能会在CoUninitialize之后被调用,
因为我遇到过这种情况,你的程序我没看

解决方案4:

up密切关注中

解决方案5:

up


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • XML解析问题:COM初始化,_bstr_t问题

相关文章

  • 2017-06-05 已知一个进程ID,如何得到祖先进程?
  • 2017-06-04 用ATL开发wordaddin怎么写一个文档间切换事件的啊。
  • 2017-06-04 如何把OpenOfficeSDK配置到VC中
  • 2017-06-04 使用VC2005,WTL75组合,居然不能插入SimpleATLObject。天大的怪事,高分求解。
  • 2017-06-04 WTL,在窗格内绘图
  • 2017-06-05 启动其他程序(很急)
  • 2017-06-05 怎么样可以实时地知道一个文件夹中的文件被修改了?
  • 2017-06-04 请问一个hook问题
  • 2017-06-05 请高手解释,同步和异步的区别
  • 2017-06-05 关于键盘钩子问题,大家帮忙!

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 求救:帮忙看下一句代码含义!
    • 在ActiveX中调用ACE初始化,为何总是不能成功?
    • shockwaveflashobject不支持此接口
    • 请教下VC中的HUGEP是什么
    • 如何在98下编译的控件可在XP下运行??
    • 在ActiveX中产生一个clickevent,为啥在VB里没有反应啊
    • windowsmediaplayer截图
    • 为什么我的输入法在98下总是安装失败?
    • MFC中添加方法和添加函数有什么区别
    • 如何将RealPlayer或者MediaPlayer嵌入到应用程序中

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有