c++ - 无法从引用的 C++ dll 获取 VB6 dll 中的 BSTR

标签 c++ dll vb6

首先让我说 VB 不是我的强项。

我正在开发要在 VB6 应用程序的 dll 中使用的 C++ dll。

我已经在 VB 中成功实例化了 (C++) 类。我正在尝试使用以下语法访问类的数据成员:“vbCppObj.dataMemberName”。

我可以确认这适用于 bool 和枚举类型,并且它会调用我的类中定义的 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% 正确。

最佳答案

事实证明,我不得不将字符串转换为“_b_str”,然后再转换为“BSTR”。那对我有用。

我之前试过,但不知道为什么当时不行。

关于c++ - 无法从引用的 C++ dll 获取 VB6 dll 中的 BSTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29271427/

相关文章:

c++ - 对 double 的小数部分求和并在 "overflows"时递增的最有效方法是什么?

c++ - C++ 十六进制输出到字符串

go - 如何使用其序数值从 DLL 中查找过程?

c# - 无法加载文件或程序集,无法验证强名称签名

vb6 - 输入框取消

c# - 如何在 C# 中动态加载 VB 6.0 dll?

c++ - constexpr 和未定义的行为

c++ - 在 VS C++ 6.0 中,什么调试工具可以很好地查找内存泄漏的位置?

c++ - 创建对话框时没有类或命名空间

error-handling - 什么导致VB6 "Run-Time Error ' 5': Invalid Procedure Call or Argument"