我有這樣的代碼在我的VB6應用程序:通BSTR從C++ DLL函數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,而不是真正的字符串。有沒有人知道真正的方法是什麼創建和傳遞有效的BSTR從C++到VB6?
+1另請參見[Microsoft關於從VB調用C DLls的注意事項](http://vb.mvps.org/tips/vb5dll.asp)。寫爲VB5,但從未更新爲VB6。但是它與VB6相關的是99.9%。所有在主持這個文件的[美妙的VB6站點](http://vb.mvps.org/) – MarkJ 2011-05-26 11:17:37