草庐IT

windows - 将 BSTR 转换为 wstring

如何将char[256]转成wstring?更新。这是我当前的代码:chartestDest[256];char*p=_com_util::ConvertBSTRToString(url->bstrVal);for(inti=0;i 最佳答案 如果您的输入是BSTR(看起来是这样),则数据已经是Unicode,您可以直接将其转换为wstring,如下所示。_bstr_t具有到char*和wchar*的隐式转换,这避免了手动Win32代码转换的需要。if(url->bstrVal){//true=>makeanewcopy-canav

c++ - 如何获得_bstr_t的长度

我正在使用以下方法将wstring复制到_bstr_t:_bstr_tname;SysFreeString(name);//Freepreviousstring,ifany.name=SysAllocString(Member[k].Membername);现在,在我使用“名称”之前,我想检查它是否包含至少5个字符。换句话说,我想检查它的长度。我没有找到“countof”或“len”或类似的东西。有人有想法吗?谢谢,伦皮 最佳答案 name.length()http://msdn.microsoft.com/en-us/librar

C++ 函数为无法调用 SysFreeString() 的函数返回 BSTR

请耐心等待,我作为C++程序员已经有一段时间了。我需要知道我是否做错了。它有效,但我怀疑它会导致内存泄漏。我有这个功能:_bstr_tWCH2BSTR(wchar_t*st){BSTRstres=SysAllocString(st);return(_bstr_t)stres;}假设我要使用这样的结果:wcout这会导致内存泄漏,还是BSTR会被Java中的“垃圾收集器”删除?如果是内存泄漏,我怎样才能在不失去作为单行程序的能力的情况下防止它发生?有时WCH2BSTR的结果存储在BSTR变量中并正确处理,但我想使用相同的函数以单行方式将wchar_t连接到BSTR。谢谢。

windows - BSTR 是否采用 UTF-16 编码?

我正在尝试学习Unicode?对我来说最困难的部分是编码。BSTR(基本字符串)内容代码点可以U+10000或更高吗?如果不是,那么BSTR的编码是什么? 最佳答案 在Microsoft-speak,Unicode通常是UTF-16的同义词(如果没记错,则为小端字节序)。在BSTR的情况下,答案似乎是视情况而定:OnMicrosoftWindows,consistsofastringofUnicodecharacters(wideordouble-bytecharacters).OnApplePowerMacintosh,consi

c++ - 在不同的线程上解除分配 BSTR 是否安全?

如果我在一个线程上调用一个返回BSTR的COM方法,那么从另一个线程?COM调用完成后,我将不再在第一个线程上使用BSTR,因此应该不会有任何并发​​问题。但是考虑到COM与线程的关系,我不确定SysFreeString()是否依赖于在同一线程上分配的BSTR。示例代码:BSTRvalue=nullptr;HRESULThr=pComObject->DoSomething(&value);if(FAILED(hr)){returnhr;}std::threadt([value]{//dosomethingwithvalueSysFreeString(value);});t.detach

c++ - 如何正确地将 _bstr_t 重置为 `NULL`

在下面的代码片段中(循环的简化场景)_bstr_toriginal(OLESTR("MyString"));//ref-count=1_bstr_tanother;another=original;//ref-count=2//dosomethingwithanotheranother.Assign(NULL);//expected:ref-count=1,andanother=NULL//resetanothertoNULLbeforedoingotheroperations在another.Assign(NULL)之后我期望的是:SysFreeString()未被调用另一个设置为N

c++ - float 到 _bstr_t

我知道我可以通过以下方式创建一个带有float的_bstr_t:mValue=_bstr_t(flt);我可以通过首先声明一个c字符串来格式化浮点字符串:char*str=newchar[30];sprintf(str,"%.7g",flt);mValue=_bstr_t(str);我对C++有点生疏,尤其是涉及到_bstr_t时,它是VisualBasic字符串类型的C++类包装器。str指向的内存会被_bstr_t对象管理吗?我的问题是将float(flt)传递给_bstr_t的构造函数会导致数字为33.03434的float变成“33,03434”,例如,如果我当前的语言集是意大

c++ - _bstr_t 内存泄漏

我有一个C++代码。但它没有正确释放内存。告诉我哪里错了,这是我的代码1voidMyClass::MyFunction(void)2{3for(inti=0;iGetXML(第5行)返回一个BSTR。此时程序的内存增加。但是在SysFreeString(第7行)之后内存并没有释放。我在这里做错了什么? 最佳答案 首先://Thismakesacopy.//Thisiswheretheleakis.Youareleakingtheoriginalstring._bstr_txml=GetXML();//Youwanttousethis

c++ - 使用构造函数的术语是什么?

一位同事写了下面的代码,我确信这是错误的。我想向他解释这些问题,但不知道合适的术语,所以找不到支持我立场的引用资料:他的代码:BSTRsomeString=_bstr_t(L"HelloWorld");为什么我认为它是错误的:我相信_bstr_t(L"HelloWorld");会调用_bstr_t的构造函数,并创建该类型的短期临时变量。在这行代码之后(分号序列点之后),该临时文件将被自动删除,并释放其字符串空间。这将使someString指向内存已被释放。问题:调用构造函数的正确术语是什么?你能指出一些详细描述使用的引用/术语/页面吗?是否有临时_bstr_t对象的术语?我想我会称它为

c++ - 如何在 Visual Studio C++ 2010 中将 BSTR 转换为 std::string?

我正在处理COMdll。我希望将BSTR转换为std::string以传递给采用常量引用参数的方法。似乎使用_com_util::ConvertBSTRToString()来获取BSTR的char*等价物是一种合适的方法。但是,API文档很少,而且实现可能存在问题:http://msdn.microsoft.com/en-us/library/ewezf1f6(v=vs.100).aspxhttp://www.codeproject.com/Articles/1969/BUG-in-_com_util-ConvertStringToBSTR-and-_com_util例子:#inclu