I have to create a DLL which is used by a VB6 application. This DLL has to provide several functions, some of them must return strings.
This is the VB6 declaration:
Declare Function MyProc Lib "mylib.dll" (ByVal Param As String) As String
And this the Delphi implementation stub in
function MyProc(AParam: PChar): PChar; stdcall; var ReturnValue: string; begin ReturnValue := GetReturnValue(AParam); Result := ???; end;
What do I have to return here? Who will free the memory of the returnd PChar string?
EDIT: I'm asking about Delphi 2005 (
You need to craft a BSTR instead. VB6 strings are actually BSTRs. Call
SysAllocString()on the Delphi side and return the BSTR to the VB6 side. The VB6 side will have to call
SysFreeString()to free the string - it will do it automatically.
PCharcorresponds to an ANSI string (your case) you have to manually convert it to Unicode - use
MultiByteToWideChar()for that. See this answer for how to better use