gpt4 book ai didi

delphi - 在何处/何时释放发送到外部 DLL 的 PWideChars

转载 作者:行者123 更新时间:2023-12-03 18:25:07 25 4
gpt4 key购买 nike

我在我的主可执行文件上为几个 PWideChar 分配内存

var
pwcValor: PWideChar;
begin
pwcValor := AllocMem( sizeof(WideChar) * Succ(Length(pValor)));
StringToWideChar(pValor, pwcValor, Succ(Length(pValor)));
pMetodo(pCodigo, pCodigoParametro, pwcValor);

所有这些变量都使用后期绑定(bind)发送到外部 DLL。我对这种情况有一些疑问,以避免内存泄漏。
  • 我应该在哪里(在我的 exe 或我的 dll 上)在这些变量上调用 FreeMem?
  • 我需要对这些变量调用 FreeMem 吗?
  • 我什么时候可以(或应该)在这些变量上调用 FreeMem?

  • 如果我在外部 DLL(也是我的)中调用它们,当我尝试从内存中卸载 DLL 库时,我会遇到访问冲突。
    Tks

    编辑

    有件事我忘了问。而反过来呢?我有从我的 DLL 到 EXE 的返回参数,所以 PWideChars 分配在 DLL 上。所以,我必须在 DLL 上释放它们,对吗?但我可能仍会在 EXE 上使用它们。我必须在 EXE 上预先分配,将指针发送给 DLL,然后在这些情况下将其填充到 DLL 中吗?或者只是在返回参数的 EXE 上制作一个副本,这样我就可以在 DLL 上安全地释放它?

    最佳答案

    最终,这取决于您使用的 DLL 的设计。但是,我会说,如果没有另外记录,则在 DLL 函数返回后立即释放资源是安全的。我什至建议你应该这样做。无论如何,您必须这样做以避免内存泄漏。

    关于最后一句话,DLL 和调用的 EXE 虽然都是 Delphi 代码,但它们使用不同的内存管理器,所以不能在 DLL 中释放 EXE 中分配的内存。

    关于delphi - 在何处/何时释放发送到外部 DLL 的 PWideChars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4284126/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com