Pass BSTR de la función C ++ DLL a la aplicación VB6

Tengo este código en mi aplicación VB6:

Private Declare Function FileGetParentFolder Lib "Z-FileIO.dll" _
(ByVal path As String) As String

Output.AddItem FileGetParentFolder(FileText.Text)

Output es una lista, FileText es un campo de texto que contiene una ruta de archivo. Mi DLL de C ++ contiene esta función:

extern "C" BSTR ZFILEIO_API FileGetParentFolder(Path p)
{
    try {
        return SysAllocString(boost::filesystem::path(p).parent_path().c_str());
    } catch (...) {
        return SysAllocString(L"");
    }
}

dóndePath se escribe comoLPCSTR. El argumento entra en mi DLL perfectamente, pero cualquier cosa que intente transmitir, la aplicación VB6 solo muestra basura. Probé varios métodos diferentes conSysAllocStringByteLength, lanzando elSysAllocString argumento aLPCWSTR y otras variantes. O bien, solo veo la primera letra de la cadena, o solo veo Y con puntos, pero no la cadena real. ¿Alguien sabe cuál es el método real para crear y pasar BSTR válidos de C ++ a VB6?

Respuestas a la pregunta(2)

Su respuesta a la pregunta