У меня есть этот код в моем приложении 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?