标签: bstr

如何将char*转换为BSTR?

如何将char*从C dll传递给VB

这是示例代码:

void Cfunc(char *buffer,int len)
{
  BSTR buf_bstr = SysAllocString((BSTR)buffer);
  VBptr.VBfunc(buf_bstr,len);
}
Run Code Online (Sandbox Code Playgroud)

此功能不起作用,实际上其他一些值被发送到VB而不是实际值.

有人可以建议一个解决方案?

c string vb6 com bstr

21
推荐指数
3
解决办法
4万
查看次数

为什么C#/ .net字符串长度为前缀且空终止?

在阅读了什么是空终止字符串的基本原理?我发现在C#/.中,一些类似的问题在内部,Net字符串都是长度前缀和null终止,就像在BSTR数据类型中一样.

字符串是长度前缀还是空终止而不是例如的原因是什么.只有长度 - 前缀?

.net c# string bstr null-terminated

18
推荐指数
2
解决办法
3488
查看次数

将BSTR转换为char*

任何人都知道如何将BSTR转换为char*?

更新:我试图这样做,但不知道它是对还是错.

char *p= _com_util::ConvertBSTRToString(URL->bstrVal);
strcpy(testDest,p );
Run Code Online (Sandbox Code Playgroud)

c++ bstr char visual-c++

14
推荐指数
1
解决办法
3万
查看次数

用于检测将wchar_t*传递给BSTR的静态代码分析

由于BSTR只是typedefwchar_t*我们的代码库,其中字符串文字传递给方法的几个(许多?)的地方期待BSTR这可以胡来了marshallers或任何人谁尝试使用任何BSTR特定的方法(比如SysStringLen).

有没有办法静态检测这种滥用?

我尝试使用VC10 /Wall和静态代码分析Microsoft All Rules进行编译,但是以下任何一个代码都没有被其中任何一个标记.

void foo(BSTR str)  
{
    std::cout << SysStringLen(str) << std::endl; 
}

int _tmain()
{
    foo(L"Don't do that");
}
Run Code Online (Sandbox Code Playgroud)

更新:在试图破坏wtypes.h我已经放弃的这些违法行为之后.

我尝试了两条路径,这两条路径都是我上面的示例程序,但是一旦我尝试了一个真正的项目,它们就失败了.

  1. 创建一个名为BSTR但是由于一个VARIANT有一个BSTR联合成员的类,新类不能有任何构造函数或赋值运算符,这个被破坏的每个地方都NULL被视为一个BSTR.我尝试NULL用具有转换运算符的类型替换但在添加了几十个新运算符(比较,转换等)之后,我开始遇到模糊的调用而放弃了.
  2. 然后我尝试了@CashCow和@Hans建议的方式(BSTR使用typedef另一种类型的指针).这也没有用,在添加toBSTRfromBSTR乱丢comutil.h(_bstr_t)和其他转换的地方之后,我终于到了编译器在IDL生成的标题处被阻塞的点(默认值被转换为文字宽字符串).

总之,如果有人知道一个代码分析工具可以帮助我很高兴听到它,我已经放弃了尝试自己实现这个目标.

c++ bstr visual-c++ static-code-analysis

13
推荐指数
1
解决办法
1247
查看次数

如何将_bstr_t转换为CString

我有一个_bstr_t变量bstrErr,我有一个CString变量csError.如何设置该进来的价值bstrErrcsError

c++ com mfc bstr visual-c++

12
推荐指数
2
解决办法
3万
查看次数

空BSTR和NULL BSTR之间应该有区别吗?

在维护COM接口时应该BSTR像对待空方式一样对待NULL?换句话说,这两个函数调用应该产生相同的结果吗?

 // Empty BSTR
 CComBSTR empty(L""); // Or SysAllocString(L"")
 someObj->Foo(empty);

 // NULL BSTR
 someObj->Foo(NULL);     
Run Code Online (Sandbox Code Playgroud)

string com bstr

9
推荐指数
2
解决办法
7782
查看次数

COM,VARIANT包含BSTR.谁分配?

好的,所以我真的不能想到一个总结这个的apropos标题.

IPrintPipelinePropertyBag接口具有AddProperty方法,该方法恰当地"将属性添加到属性包".

http://msdn.microsoft.com/en-us/library/aa506384.aspx

AddProperty([in,string] const wchar_t*pszName,[in] const VARIANT*pVar);

我们使用以下代码将字符串添加到属性包中.

CComVariant varProperty = CComBSTR(someString);
pPrintPropertyBag->AddProperty(L"SOME_PROPERTY", &varFilename);
Run Code Online (Sandbox Code Playgroud)

但是很明显,创建的CComBSTR和CComVariant在一段时间后超出了范围.我不确定PropertyBag是否处理字符串并制作自己的副本.由于我们可以在VARIANT中存储各种内容,因此情况并非如此.

假设没有处理字符串,我的问题是,在COM中执行此操作的模式是什么?我应该如何传递包含已分配字符串的VARIANT,使该字符串可用于其他线程,即使调用AddProperty的线程首先死亡,并正确地取消分配字符串?

c++ windows com bstr variant

9
推荐指数
1
解决办法
4312
查看次数

_bstr_t到UTF-8可能吗?

我有一个_bstr_t包含日文文本的字符串.我想将此字符串转换为UTF-8字符串,该字符串定义为a char *.

我可以将_bstr_t字符串转换为char *(UTF-8)字符串而不会丢失日文字符吗?

c++ com atl bstr visual-c++

9
推荐指数
1
解决办法
4442
查看次数

使用_bstr_t在函数中传递BSTR*类型的参数

这样做的正确方法是什么:

_bstr_t description;
errorInfo->GetDescription( &description.GetBSTR() );
Run Code Online (Sandbox Code Playgroud)

要么:

_bstr_t description;
errorInfo->GetDescription( description.GetAddress() );
Run Code Online (Sandbox Code Playgroud)

在哪里IError:GetDescription定义为:

HRESULT GetDescription (BSTR *pbstrDescription);
Run Code Online (Sandbox Code Playgroud)

我知道我可以轻松地做到这一点:

BSTR description= SysAllocString (L"Whateva"));
errorInfo->GetDescription (&description);
SysFreeString (description);
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ bstr

9
推荐指数
2
解决办法
4624
查看次数

如何使用SATREARRAY为BSTR的VARIANT显示值

我的工作与功能的COM对象库,它返回一个VARIANT带有SAFEARRAYBSTR秒.如何显示此VARIANT实例的值并将其保存在TStringList?我试着在网上搜索没有明确的答案.

我尝试了以下但没有成功:

Variant V;
String mystr;

VarClear(V);
TVarData(V).VType = varOleStr;
V = ComFunction->GetValues();  //<<<<----- V is empty
mystr = (wchar_t *)(TVarData(V).VString);
Memo1->Lines->Add(mystr);
VarClear(V);
Run Code Online (Sandbox Code Playgroud)

delphi bstr c++builder safearray

8
推荐指数
1
解决办法
5761
查看次数