我必须创建一个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。