VC/MFC奇怪问题集锦

来源:互联网 发布:长沙房地产 知乎 编辑:程序博客网 时间:2024/05/22 11:58

1. VS2005调试时和Spy++冲突

_CRTIMP void * __cdecl _decode_pointer(void *codedptr)

{
    _ptiddata ptd;
    PVOID (APIENTRY *pfnDecodePointer)(PVOID) = NULL;

    if (
#ifndef _M_AMD64
        (FLS_GETVALUE == NULL) ||
#endif  /* _M_AMD64 */
        __flsindex==0xffffffff ||
        (ptd = (_ptiddata)FLS_GETVALUE(__flsindex)) == NULL)
    {
        // cached function pointer is not available - look it up the traditional way


        HINSTANCE hKernel32 = GetModuleHandle(_KERNEL32);

....

}

}

查看Output后发现,输出内容有“

'XXXXXXXX.exe': Loaded 'C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\spyxxhk.dll', No symbols loaded.
First-chance exception at 0x7718d07e in XXXXXXXX.exe: 0xC00000FD: Stack overflow.
'XXXXXXXX.exe': Unloaded 'C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\spyxxhk.dll'

"

再看我的桌面,我的SPY++是出于开启状态的,待我将SPY++关闭后,就可以正常调试程序了。就这样,搞定。


2. MFC链接dll时,伪内存泄漏错误。

参考1:http://blog.csdn.net/clever101/article/details/7926541

参考2:http://blog.csdn.net/dreamcs/article/details/7924772

参考3:http://blog.sina.com.cn/s/blog_68357baf0100ujxx.html

其中参考1给了方法:

步骤为:

a.  MFC的使用中从原来的“在共享DLL使用MFC”改为“使用标准Windows库”

b. 增加预处理器:_AFXDLL

c. 在附件依赖项中增加MFC库,具体填哪个MFC库根据你的情况而定,如多字节字符集下debug编译,就填mfc90d.lib ( VS2008环境下),其它的据情况选择mfc90.lib、mfc90ud.lib或mfc90u.libd

我很认真的安装这3个步骤尝试了一下,最后发现当我只用步骤c的时候就已经解决问题了。

例子工程___在这里。


3. LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library

今天使用libevent1.4.5,编译它自带的例子client_test就出现这个warning,经过BAIDU后发现

"msvcrt.lib是VC中的Multithreaded DLL 版本的C运行时库,而libcmt.lib是Multithreaded的运行时库。在同一个项目中,所有的源文件必须链接相同的C运行时库。如果某一文 件用了Multithreaded DLL版本,而其他文件用了Single-Threaded或者Multithreaded版本的库,也就是说用了不同的库,就会导致这个警告的出现。"

然后我检查了一下libevent和client_test的设置,发现libevent是Multi-threaded Debug (/MTd);而client_test却是Multi-threaded Debug DLL (/MDd),这2个不统一,故有此错误。

我将libevent也修改为Multi-threaded Debug DLL (/MDd),就没有该Warning了。。。




0 0
原创粉丝点击