Pass BSTR da função DLL do C ++ para o aplicativo VB6

Eu tenho esse código no meu aplicativo VB6:

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

Output.AddItem FileGetParentFolder(FileText.Text)

Output é uma lista, FileText é um campo de texto que contém um caminho de arquivo. Minha DLL C ++ contém esta função:

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

OndePath é digitado comoLPCSTR. O argumento entra perfeitamente na minha DLL, mas, seja o que for que tente passar, o aplicativo VB6 mostra apenas lixo. Eu tentei vários métodos diferentes comSysAllocStringByteLength, lançando oSysAllocString argumento paraLPCWSTR e outras variantes. Ou vejo apenas a primeira letra da string ou apenas Y's com pontos, mas não a string real. Alguém sabe qual é o método real para criar e transmitir BSTRs válidos de C ++ para VB

questionAnswers(2)

yourAnswerToTheQuestion