2012-07-14 42 views
0

我所拥有的是一个由3层组成的项目。基础层是一组本地C++静态库,它们是图形,音频等游戏引擎的核心组件。静态库导致有效的堆指针声明

中间层将所有这些组合在一起形成另一个静态库,这是引擎本身。原因是因为我想将引擎编译为可执行的分发版本,但也可以将其引入最顶层。

顶层是设计用于快速创建游戏内容.NET应用程序。我想免费分发Studio,并将Engine.exe用于商业用途。因此,我为什么要创建引擎到库中。

某处前进的道路上的一个错误是通过编译阶段获得。该engine.exe工作正常,但是.NET应用程序中断当我添加:

#include <string> 
using std::string; 

该方案获得通过,没有错误编译阶段,但然后爆炸它到达第一个断点之前,其实它不”我甚至可以从我所知道的主要功能中找到答案。要么它优化了它或其他东西。我得到的错误是调试断言_CrtIsValidHeapPointer(pUserData)。它在dbgheap.c的1516行。我知道这不是问题,但我希望有人认识到这一说法,并可以提供帮助。

我最好的选择是,这个问题是值得做的,我如何链接库,也是编译器设置,我已经尝试不同的设置,没有删除了这个问题。如果任何人有任何这方面的经验,这将是伟大的,如果你需要知道更多我会很乐意发布更多的信息。

+0

我希望你的意思是你加入'的std :: string'东西到C++代码。 – Linuxios 2012-07-14 15:18:40

+0

你到底如何将lib链接到.NET项目?请注意,编译的DLL和应用程序的编译设置必须完全相同(包括编译器版本等)以确保类大小,字节对齐等相同。 – 2012-07-14 15:20:35

+0

谢谢查理,我会仔细检查一下。我已经尝试将所有库切换到/ clr是否还有其他会影响它的设置?哪些是我需要注意的?我所知道的所有库都来自我在大学时做过的一个实验室。 是Linuxios,我通过逐个引入引擎头文件来缩小问题范围。与我使用的XML Parser相关的东西似乎会导致这个问题,那就是当我测试std :: string时,所有其他头文件都被注释掉了。 感谢您的帮助迄今为止:) – Gigaros 2012-07-16 12:14:22

回答

0

我不知道为什么这工作,但答案here的伎俩。

解决的办法是将__DllMainCRTStartup @ 12添加到属性|中的'强制符号引用'链接器|输入包含静态库的C++ /ÇLI项目。