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