在MFC中添加C文件,
一般的的流程是添加完成后,取消预编译选项,然后在C文件中按照C语言的方式编写就可以了;
在C++中调用C函数,extern “C” 包含函数就可以了,或者包含C文件相关的头文件就可以了;
但是今天发现了一个问题:
在C文件中通过malloc()函数创建内存空间, 在C++中,通过new创建内存空间;
然后将C的内存空间memcpy到C++的内存空间;
在debug的时候没有问题,但是在release的时候出现了问题,如下:
//c文件:
unsignd char * CreateMem()
{
......;
unsignd char * pbuf = (unsignd char *)malloc(1000);
return pbuf;
}
//C++文件
void GetMem()
{
unsignd char * pGetBuf = CreateMem();
unsignd char * pNewBuf = new unsignd char[1000];
memcpy(pNewBuf, pGetBuf, 1000);
}
//C++程序的中调用;
void testFunction()
{
GetMem(); //release模式下,执行到这里直接崩溃;debug下运行正常;
}
大概调用方式流程是上面的,因为没有找到具体原因,所以不知道问题在哪里,只是大概写了一下;
我觉得应该都可以用,但是release出错;
百度之后,有人说是 new的时候要指定空间的类型,我猜想,或许malloc也要指定类型,但是都指定了,还是错误;
没有找到更好的办法,为了解决这个问题,我只好经C文件修改为CPP文件,然后重新编译,修改相关类型转,就可以正常运行了;
目前还不清楚什么原因,又懂得,可以分析一下,写到评论里;