我必须创建一个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()。有关如何更好地一起使用SysAllocStringLen()MultiByteToWideChar()的信息,请参见this answer

10-05 22:15