首先我要说VB不是我的强项。
我正在开发一个用于VB6应用程序的DLL的C ++ DLL。
我已经成功地在VB中实例化了(C ++)类。我正在尝试使用以下语法访问类的数据成员:“vbCppObj.dataMemberName
”。
我可以确认这适用于boolean和enum类型,它会调用我班级中定义的getter方法。
我也必须从(C ++)类访问一个字符串。 字符串的getter函数如下:
class MyCPPClass
{
private:
WCHAR* CPPErrorString = L"This is a string";
public:
HRESULT __stdcall get_CPPErrorString(BSTR* pVal)
{
BSTR str = ::SysAllocString(CPPErrorString);
if(str)
*pVal = str;
return S_OK;
}
};
我现在无法调试C ++ DLL。
我在VB6代码中访问此值,如下所示:
ErrorString = vbCppObj.CPPErrorString
Logger.log "[Log]:" & ErrorString
“ErrorString
”是VB中的String类型。执行此行时,“ErrorString
”对象会显示“<Out of memory>
”(当我将鼠标悬停在该对象上时)。如果我继续前进到日志代码,它会给我一个“错误14:超出字符串空间”。
另外,我在浏览器中输入了这段代码,因此可能不是100%正确。
答案 0 :(得分:0)
事实证明,我必须将字符串转换为“_b_str”,然后转换为“BSTR”。这对我有用。
我之前尝试过,但我不知道为什么它当时没用。
答案 1 :(得分:-1)
为什么你不使用LPCTSTR? 我不是高级C / C ++程序员,但这应该可行
class MyCPPClass
{
private:
LPCTSTR CPPErrorString = "This is a string";
public:
HRESULT __stdcall get_CPPErrorString(LPCTSTR * pVal)
{
// copy the value
*pVal = CPPErrorString;
// return
return S_OK;
}
}