У меня есть этот код в моем приложении 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
определяется как LPCSTR
. Аргумент отлично входит в мою DLL, но что бы я ни пытался вернуть, приложение VB6 показывает только мусор. Я попробовал несколько разных методов с SysAllocStringByteLength
, приведя аргумент SysAllocString
к LPCWSTR
и другим вариантам. Либо я вижу только первую букву строки, либо вижу только Y с точками, а не настоящую строку. Кто-нибудь знает, каков реальный метод создания и передачи действительных BSTR с С++ на VB6?