/*
背景:将思岚公司的sdk用c#进行开发。由于思岚公司的sdk使用C++开发,所以必须先一步将skd用C++封装成DLL库,然后提供给C#进行开发。所以C#同C++的交互是必须讨论的问题。
*/
问题描述:
用C++封装成dll供C#调用时,报出错误:内存泄漏。
经过网上查找资料之后发现问题可能出在:C++内部声明了全局变量,这个全局变量会保存上次的状态,每次调用C++方法时需要重新初始化,而方法内的局部变量会随着方法的结束而被释放。
//解决问题思路的更新
//2018.02.23
//从知乎上看到有网友说使用C++/CLI来解决项目中使用大量的C++的问题。
//2018.3.6
//已经解决了C#在调用DLL之后报出:内存泄漏 的错误。
我在全局声明了
SlamwareCorePlatform sdk;
然后在子函数中使用了sdk这个未经初始化的变量。所以导致指针指向了未知的内存,导致程序报错。
其他注意问题:
思岚公司规定了必须使用VS2010进行开发,经过尝试,其他版本的编译器不能保证程序正确运行(即使步骤一样)。
同时必须将思岚公司官网中提供SDK中的DLL文件夹下面中的
这两个文件夹放在计算机 C:\Windows\SysWOW64 目录下(如果Windows系统是X86的,则放入system32中),这样参考思岚公司的SDK的说明手册就可以进行二次开发了。