на каждый вызов функции 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?