我的 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 的位置在哪里LPCSTR
。该论点完美地进入了我的 DLL,但无论我试图传回什么,VB6 应用程序都只显示垃圾。我尝试了几种不同的方法SysAllocStringByteLength
,将SysAllocString
参数转换为LPCWSTR
和其他变体。要么,我只看到字符串的第一个字母,要么只看到带点的 Y,而不是真正的字符串。有谁知道从 C++ 创建和传递有效 BSTR 到 VB6 的真正方法是什么?