您的位置:首页 > 其它

关于DLL中导出类、导出函数接口的参数

2012-09-11 15:43 204 查看
内存的申请与释放是编写DLL时经常带来麻烦的问题,下面举两个最近遇到的例子。

1. vector&,与其它类似的参数错误的做法:以vector&形式传递参数,用来接收数据,在DLL内对vector进行填充。这样做会导致vector在DLL外析构时发生内存指针失效异常。这类问题只发生在程序静态编译的情况下。错误原因:vector在DLL通过pushback函数开辟了堆空间,析构时在DLL外进行内存释放。《Windows
核心编程》第5版19章 DLL编程有详细讲解。 正确的做法:以vector*形式传递参数,传递NULL指针到DLL,由DLL通过new开辟空间,能及填充内容。DLL提供释放接口函数类似 void destroy(vector* pVector); DLL的调用者在对数据使用完毕后,调用些函数进行内存释放。

2. string,与其它在拷贝构造时会开辟空间的数据类型 错误的做法:通过传递形参提供数据给DLL BOOL IsPathExist(string strPath)。这样做会导致strPath在DLL函数IsPathExit退出时,调用string类的析构后发生内存指针失效异常。这类问题也只发生在程序静态编译的情况下。错误原因:strPath在函数被调用时,通过拷贝构造被创建,但此过程是发生在DLL外的!正确的做法:传递string&
strPath,避免拷贝构造。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: