项目配置参数
IDE:VS2010+SP1
配置类型:.Net 应用程序(.exe)
MFC的使用:使用标准Windows库
ATL的使用:不使用ATL
字符集:使用Unicode字符集
公共语言运行时支持:公共语言运行时支持(/clr)
发现问题
调用了某个Win32的标准DLL,需要传入一个LPCTSTR,所以需要将System::String^转换为LPCTSTR,最简单的方法是通过CString,因为CString支持到LPCTSTR的隐式转换。代码如下:
void DoSth(String^ _para)
{
CString temp(_para);
DLLObj->Done(temp);
}
但为了不引用大量MFC内容,使用atlstr.h头文件,这里面有CString的定义。一旦包含了atlstr.h,则程序运行即报_CrtIsValidHeapPointer断言异常。
google、baidu、bing了个遍,也没找到可行的方案(可能是兄弟我水平有限,要是哪位朋友发现解决办法,别忘知会俺一声)。最后在微软的老窝发现一个类似的贴子,可惜不是问题贴,而是被当作Bug提交的,有兴趣的朋友可以点这里<