我想构建一个导出返回字符串的函数的DLL。这个DLL应该与其他编程语言一起工作! 我发现了各种令人讨厌的解决方案/黑客攻击,最好的做法是让我的函数返回Pchar,然后调用包含在同一个DLL中的另一个函数(让我们称之为ReleaseMemory)释放为PChar保留的内存。与其他编程语言兼容的Delphi DLL
无论如何,最近我发现了FastShareMem库。它表示,它可以在不调用ReleaseMemory的情况下完成我想要的操作。另一方面,FastMM似乎与DLL和应用程序使用FastMM作为内存管理器一样执行相同的操作。这立即杀死了使用FastMM作为我的通用DLL的内存管理器的机会。对?
====================
FastShareMem(http://www.codexterity.com/fastsharemem.htm),Delphi 7中,Windows XP的32位,视窗7 64位
+1。我真的希望我能回到PChar,但你的论点似乎很稳固。 – Ampere 2010-08-11 20:46:38
你可以像COM一样强制执行。如果您不使用COM函数来释放COM分配的内存,则会出现错误。这就是它“执行”事情的方式。您可以以同样的方式强制使用DLL自己的内存管理代码。从DLL中分配和返回指针没有任何危险。 EXE存在误用内存的风险,但总是存在其他代码存在缺陷的风险。这不是你的问题。 – 2010-08-11 21:22:17
问题是那些不了解指针的语言可以通过缓冲区,这些缓冲区是自动管理的。恕我直言,让调用者管理其内存并仅仅操作已分配的缓冲区要比分配一个并请求调用者释放它更好,尤其是如果你不能像COM那样强制你的onw数据类型。代码可能有错误,但有些技术比其他技术更容易引入错误。 – 2010-08-12 07:19:53