将BSTR从C ++ DLL函数传递到VB6应用程序
|
我的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并将其从C ++传递到VB6的真正方法是什么?
没有找到相关结果
已邀请:
2 个回复
捻盒愧杯
勘掸府迫路
在ѭ8的参数类型中,ѭ9auto自动转换为ANSI字符串,即
。传递/接收unicode字符串(
或
)的唯一方法是使用typelib API函数声明。 除此之外,您始终可以在声明中使用
参数,并期望
,但是在每次调用API函数时,使用者都必须将字符串包装在
中。