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?