- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个正在开发的 COM DLL,但遇到了一些问题。我有一个 try catch 围绕一个代码块,在 catch 中我从异常中得到一个 _bstr_t
。我想做的是捕获该异常并将其打印到一个字符串中,但是,当该异常被抛出时,它向我抛出一个无效的空指针错误。我试着查看有关如何检查空指针的 MSDN,但它似乎不起作用。我无法真正调试该错误,因为这是在客户端计算机上,并且在尝试输出信息时出现此错误。
catch(const _com_error& ex)
{
::OutputDebugStringW(ex.Description());
_variant_t ret;
std::string str = "#N/A ExcelException: ";
_bstr_t desc = ex.Description();
if(!desc || desc.GetBSTR() == L"")
{
str += ConvertBSTRToMBS(desc);
}
ret.SetString(str.c_str());
*Result = ret.Detach();
}
std::string ConvertBSTRToMBS(_bstr_t bstr)
{
std::string converted((char *)bstr);
return converted;
}
最佳答案
由于 if
条件错误,ConvertBSTRToMBS
仅在 bstr
为 null 时被调用。更正如下
if(!!desc && desc.length() != 0)
{
str += ConvertBSTRToMBS(desc);
}
奇怪的!!desc
表达式表示!(desc.operator!())
。_bstr_t::operator!
如果 BSTR
为 null,则返回 true,因此您必须取反它以检查非 null。
关于c++ - 使用 _bstr_t 时无效的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092718/
_bstr_t::wchar_t*, _bstr_t::char* operators返回不同类型的字符串。 我需要delete或 free他们?使用哪个功能? 最佳答案 使用调试器逐步实现后,我的结
我有一些读取文件的代码,但它使用的是 std::string,我需要使用 _bstr_t下面的代码可以正常工作。如何改变类型? std::ifstream inFile("QdatPassWor
我有一个 C++ 代码。但它没有正确释放内存。告诉我哪里错了,这是我的代码 1 void MyClass::MyFunction(void) 2 { 3 for (int i=0; i查看->选
多年来我一直在使用这个类(class),它总是“就在那里”。前几天我创建了一个新项目,没有明确做任何事情,这个类是可用的。 现在另一个新项目提示它不知道。两个项目都有相同的#includes。 这两个
我这里有一件奇怪的事。我正在连接 _bstr_t字符串以组装 SQL 命令。 _bstr_t strSQL = a+b+k+hk+Allin+hk+k+hk ...等等。 当我将它打印到控制台时(使
我有一些带有 COM 字符串操作的源代码,但是这些代码让我感到困惑 _bstr_t btLeft; _bstr_t tempData ; _bstr_t btRight ; //Do somethin
我有一个正在开发的 COM DLL,但遇到了一些问题。我有一个 try catch 围绕一个代码块,在 catch 中我从异常中得到一个 _bstr_t。我想做的是捕获该异常并将其打印到一个字符串中,
我正在尝试使用 c 在 excel 中绘制一系列图。问题是当我尝试循环制作绘图时,我必须更改 excel 中工作表的名称。但是这些名称是 _bstr_t 格式的: pSheet->Name =
我知道我可以通过以下方式创建一个带有 float 的 _bstr_t: mValue = _bstr_t(flt); 我可以通过首先声明一个 c 字符串来格式化浮点字符串: char* str = n
第一的: LPCTSTR asdfsdf = (LPCTSTR)(_bstr_t)v; printf("%s\n", asdfsdf); 第二: printf("%s\n", (LPCTSTR)(_b
我有一个键类型为 _bstr_t 的无序映射。因此,由于哈希函数默认不支持这种键类型,因此我定义了仿函数: struct KeyHash { size_t operator()(const _
我来自 Java,所以我对 C++ 中的许多类型的字符串感到困惑 我有一个函数输入: functionTest(_bstr_t *params) {...} 然后我有一个变量声明为: CString
我有一个 Windows 代码,我想移植到 Linux。在一个地方它使用 _bstr_t。我想知道是否有可用的最小 _bstr_t 端口。我四处寻找 - 但没找到。 我要移植的windows代码是这样
在下面的代码片段中(循环的简化场景) _bstr_t original(OLESTR("MyString")); // ref-count = 1 _bstr_t another; another =
我有 char* 数组,我正在为其动态分配内存。 char *strData = new char[length+1]; 这个 char* 我传递给 _bstr_t,如下所示, _bstr_t bst
我有一个 _bstr_t 变量 bstrErr 并且我有一个 CString 变量 csError。如何将 bstrErr 中的值设置为 csError? 最佳答案 难道就不能投吗: _bstr_t
谁能解释上面提到的类型之间的区别以及一些示例用法以清楚地解释两者之间的区别? 任何帮助将不胜感激!注意:这个问题是 this other question 的衍生问题。 最佳答案 BSTR 是 COM
举个简单的例子: _bstr_t smartString(L"MyString"); Process(smartString); // takes BSTR. 最初我认为 _bstr_t 有一个从 _
我尝试解密给定文件,但存储的内容是使用 _bstr_t 类在 C++ 中完成的。我已经搜索了 2 个小时,测试了所有内容,但我仍然没有得到正确的结果:reading Korean _bstr_t'd
这段代码不会产生错误吗: _bstr_t text=n.GetText(); atof((char*)text) 其中文本是 double 值。 我知道 _bstr_t 在转换中产生一个 const
我是一名优秀的程序员,十分优秀!