我们是一个MFC应用程序,它链接到win32 DLL。当应用程序调用此DLL函数时,参数" buffer"进入功能堆栈后,它变为“坏指针”#34;这会导致应用程序崩溃。
static MyClass* Instance(string& buffer);
我将参数类型更改为" char *",但它只将崩溃推送到函数中的next语句。如何检测这个堆损坏?
CString data = "some string";
string str = data.GetBuffer();
data.ReleaseBuffer();
MyClass *obj = MyClass::Instance(str);
答案 0 :(得分:1)
有两个错误:
一些自定义构建的C ++文件未使用MD开关编译。我们必须将-MD添加到自定义构建脚本中,以使CRT与其他对象保持一致。
LIBCMT.LIB和MSVCRT.LIB之间存在LNK2005冲突,否则由于/ FORCE开关而被忽略。我们通过在Linker->输入
感谢大家的帮助。
答案 1 :(得分:0)
我猜这是calling conventions的错误使用或CRT不匹配(我使用调用约定)。
尝试使用相同的函数签名(无效)构建存根DLL,并使其与您的MFC应用程序一起使用。
这是example ...
HTH