gpt4 book ai didi

delphi - 如何将 PChar 从 DLL 函数返回到 VB6 应用程序而不会有崩溃或内存泄漏的风险?

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

我必须创建一个 VB6 应用程序使用的 DLL。该 DLL 必须提供多个函数,其中一些函数必须返回字符串。

这是 VB6 声明:

Declare Function MyProc Lib "mylib.dll" (ByVal Param As String) As String

这是 mylib.dll 中的 Delphi 实现 stub :

function MyProc(AParam: PChar): PChar; stdcall;
var
ReturnValue: string;
begin
ReturnValue := GetReturnValue(AParam);
Result := ???;
end;

我需要返回什么?谁将释放返回的 PChar 字符串的内存?

编辑:我询问的是 Delphi 2005 (PChar = PAnsiChar)

最佳答案

您需要制作一个 BSTR。 VB6 字符串实际上是 BSTR。在Delphi端调用SysAllocString()并将BSTR返回给VB6端。 VB6 端必须调用 SysFreeString() 来释放字符串 - 它会自动执行此操作。

如果 PChar 对应于 ANSI 字符串(您的情况),您必须手动将其转换为 Unicode - 使用 MultiByteToWideChar() 来实现。请参阅this answer了解如何更好地结合使用 SysAllocStringLen()MultiByteToWideChar()

关于delphi - 如何将 PChar 从 DLL 函数返回到 VB6 应用程序而不会有崩溃或内存泄漏的风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1699736/

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