на каждый вызов функции API.

я есть этот код в моем приложении VB6:

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

Output.AddItem FileGetParentFolder(FileText.Text)

Выход - это список, FileText - текстовое поле, содержащее путь к файлу. Моя C ++ DLL содержит эту функцию:

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

гдеPath typedef'd какLPCSTR, Аргумент входит в мою DLL отлично, но что бы я ни пытался передать обратно, приложение VB6 показывает только мусор. Я пробовал несколько разных методов сSysAllocStringByteLengthКастингSysAllocString аргументLPCWSTR и другие варианты. Либо я вижу только первую букву строки, либо вижу только Y с точками, но не настоящую строку. Кто-нибудь знает, что настоящий метод для создания и передачи действительных BSTR из C ++ в VB6?

Ответы на вопрос(1)

Ваш ответ на вопрос