申请退出发布

时间:2013-11-20 09:16:21

标签: c++ .net dll

我正在开发一个包含多个DLL的项目,所有这些都包含源代码。代码是C ++中的一些.Net和C#(外部源代码对我来说是一个黑盒子)并使用VS2010。昨天,我编译了项目,但是在启动时应用程序退出(在发布中)或者失败了一个断言(调试)。失败的断言是

msvcr100d.dll!_msize_dbg(void * pUserData,int nBlockUse)第1516行+ 0x30字节C ++

/*
* If this ASSERT fails, a bad pointer has been passed in. It may be
* totally bogus, or it may have been allocated from another heap.
* The pointer MUST come from the 'local' heap.
*/
_ASSERTE(_CrtIsValidHeapPointer(pUserData));

我在SO上发现了几个类似的问题(例如thisthis),这使我确认所有项目都使用/ MD和/ MDd标志进行编译。我在main()的第一行放置了一个断点,但从未到达它。

完整的调用堆栈是

  

msvcr100d.dll!_msize_dbg(void * pUserData,int nBlockUse)1516行+ 0x30字节C ++       msvcr100d.dll!_dllonexit_nolock(int(void)* func,void(void)* * * pbegin,void(void)* * * pend)第291行+ 0xd字节C       msvcr100d.dll!__ dllonexit(int(void)* func,void(void)* * * pbegin,void(void)* * * pend)第269行+ 0x11字节C       DPlus.exe!_onexit(int(void)* func)第110行+ 0x18字节C.       DPlus.exe!atexit(void(void)* func)第127行+ 0x9字节C.       DPlus.exe!std ::`动态初始化器为'_Fac_tidy_reg''()第49行+ 0xf字节C ++       [管理到原生过渡]
      DPlus.exe!_initterm(void ** pfbegin,void pfend)第132行C ++       DPlus.exe!:: LanguageSupport :: InitializeNative()第376行C ++       DPlus.exe!:: LanguageSupport :: _ Initialize()第491行C ++       DPlus.exe!:: LanguageSupport :: Initialize()第698行C ++       DPlus.exe!?。cctor @@ $$ FYMXXZ()第749行+ 0x9字节C ++       mscoreei.dll!7450f5a3()
      [下面的框架可能不正确和/或缺失,没有为mscoreei.dll加载符号]
      mscoree.dll中!74587f16()
      mscoree.dll中!74584de3()
      KERNEL32.DLL!7559336a()
      ntdll.dll中!77219f72()
      ntdll.dll!77219f45()

在调用堆栈中,第一个项目有一个变量,可以提供更多信息。在文件mstartup.cpp的DPlus.exe!?.cctor@@$$FYMXXZ() Line 749 + 0x9 bytes C++中,第748行LanguageSupport languageSupport; languageSupport.ErrorMessage的值为"The C++ module failed to load during native initialization."这导致我有更多链接(SO:1,{{ 3}}; MSDN:2)这对我​​没有任何启发。

最奇怪的是,我做了一个干净的结账,以前编译和运行的修订,但不再做。这种情况发生在我的桌面(Win7)和笔记本电脑(Win8)上。

有关从哪里开始(继续)寻找的任何提示?

感谢。

===========更新===========

我能够将问题本地化。包含在一个项目(C ++,CL和DLL)中的包含模板类(不在DLL中),但在GUI(C ++,。Net)中包含时不会。如果我删除#include并插入一个不执行任何操作的虚拟类,则项目将运行(没有所述类提供的一些功能)。现在我真的很困惑。

===========更新===========

模板类中包含的库是:

#pragma once
#include <vector>
#include <string>
#include "Eigen\Core"
#include "Common.h"
#include <sstream>
#include <Eigen/Eigenvalues>
#include <Eigen/Geometry>
#include "boost/filesystem.hpp"
#include "boost/filesystem/fstream.hpp"
#include <boost/algorithm/string/predicate.hpp>
#include <iostream>

0 个答案:

没有答案