如何在Dll中分配内存,而在调用程序里释放

2024-12-03 10:08:42
推荐回答(1个)
回答(1):

声明:没有经我许可,不得转载此篇文章,侵权必究。

曾经在开发Dll时遇到过这样的问题:我在Dll中用new分配了一块内存,并向其中填好数据,然后把指针传给Dll调用者;在调用程序里,我能使用这个指针,并读取它里面的数据,但是在delete时,VS弹出一个“用户断点”错误提示框。也就是说不能在调用程序里delete由Dll里new出的指针。
那我怎么将大量数据传递给调用者呢?
有一次,在网上浏览关于MIDL的技术文章时,看到作者使用了CoTaskMemAlloc/CoTaskMemFree函数来分配/释放内存。我突然想试试它能否解决前述的问题。果然能行!
可是为什么呢?我查看了MSDN中CoTaskMemAlloc函数的描述,但没有找到答案~~但在一篇网络求助帖中我看到了类似问题和回答,下面将三个回答者的部分观点贴出来。