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 as はどこにありますかLPCSTR
。引数は完全に私の DLL に入りますが、何を返そうとしても、VB6 アプリはゴミしか表示しません。でいくつかの異なる方法を試し、引数をSysAllocStringByteLength
にキャストし、他のバリアントを作成しました。文字列の最初の文字しか表示されないか、実際の文字列ではなく、ドット付きの Y のみが表示されます。有効な BSTR を作成して C++ から VB6 に渡すための実際の方法を知っている人はいますか?SysAllocString
LPCWSTR