【发布时间】:2011-10-20 14:27:47
【问题描述】:
这是我第一次使用这样的网站,但我被严重卡住了。 为了完整起见,包含以下背景部分,因为我不确定其中描述的任何操作是否可能导致我当前面临的问题。
背景
我和一位同事在 Visual Studio 2010(完整版)的控制台应用程序(使用默认设置)中为大学作业编写了大量 C++ 代码。我们决定尝试一个 winforms 应用程序,因此在 Visual Studio 2010 中创建了一个,并从控制台应用程序中导入了我们所有的代码。我们遇到了以下问题:
- 需要在“stdafx.h”文件中添加我们的包含,然后在我们所有的实现文件(.cpp)中添加#include“stdafx.h”。
- 在我们使用 c++ 字符串 (std::string) 的地方,我们必须更改为托管系统字符串 (System::String^) 以实现 CLR 兼容性。
- 将“公共语言运行时支持”编译选项更改为 /clr 而不是 /clr:pure。这是解决我们在 boost::shared_ptr 中遇到的链接错误(LNK2028、LNK2019)所必需的......
在我们做完上述事情之后,我们的项目正在编译。
问题
当我们运行应用程序时,我们得到以下断言失败:
_CrtIsValidHeapPointer(pUserData)
这个断言立即失败,似乎没有执行任何代码,因为当我在 main 开始处设置断点时,它们在调试中没有到达(调用堆栈为空)。
我能够让应用程序运行的唯一方法是将 CLR 选项设置为 /clr:pure 并删除所有 boost 的使用。
我有 3 个问题:
- 是否正在执行代码?我知道在不执行代码的情况下断言可能会失败听起来是不可能的。也许在 main 之前发生了什么?
- /clr 和 /clr:pure 选项的真正含义是什么?
- 可以将 boost 库编译为 clr 兼容代码吗?如果是这样,什么可能导致链接问题?
感谢大家的宝贵时间,我没有发布任何代码,因为我真的不知道该发布什么...我不知道问题出在哪里。如果有人对发布什么代码有建议,我愿意接受。
问候 布拉德
【问题讨论】: