一个关于BSTR的问题

我也看不穿 2000-03-28 11:46:00
加精
COM的字符串的类型常常是BSTR
我用的一个控件TBig2GB中
它定义了接口 BSTR GBToBig(BSTR* GBStr)

我的程序只是又用到两个TEdit,我是这样写的:
BSTR str=BSTR(WideString(Edit1->Text));
Edit2->Text=Big2GB1->GBToBig(&str);
编译,联接通过,执行中出现:
(this->GBToBig(GBStr,¶m2))Error:800A01A9(-2146827863)@c:\Program
files\borland\cbuilder4\Imports\BigToGB_TLB.h/240
Press [Y]es to terminate,[N]o to continue and [C]ancel to Debug

但在VB下只要简单的写:
Text2.Text=Big2GB1.GBToBig(Text1.Text)
就运行的很好

请问,在C++ Builder中如何写
...全文
179 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
halfdream 2000-05-20
  • 打赏
  • 举报
回复
BSTR str=BSTR(WideString(Edit1->Text));
这几种写法都可以,问题应该不会在这儿。
在VB中当然方便,因为BSTR 就是Basic String.
有可能是象sunsetyang 所说的是因为栈中分配有关,而你是传址而不是传值。

那个控件包含类型库没有?用BCB中导入类型库产生头文件中相应地方贴出来看一看。
Iwant 2000-05-10
  • 打赏
  • 举报
回复
那是因为你的 BSTR 指针 初始化可能不对。
另外你把 AnsiString 转换成 wchar_t 最好用 widechartostring()更好用。
另外:BSTR str=BSTR(WideString(Edit1->Text))可能也不对。BSTR 本来就是转换成
*wchat_t 型的 何必要WideString(Edit1->Text)??
可以如下写:
wchar_t *a;
String b;
b=edit1->text;
a=L"gfkajgkajkfjajgjgrjie" //初始化
widechartostring(b,a,edit->lenght()+100) //长度要大一点
Edit2->Text=Big2GB1->GBToBig(a);
这样很好debug.
应该不会有问题了。


huangkai 2000-05-09
  • 打赏
  • 举报
回复
WideString(Edit1->Text).c_bstr();
adams 2000-05-01
  • 打赏
  • 举报
回复
由错误信息看,函数GBToBig由2个参数,你却只用了一个。
有时VB可以省略参数,BCB不行。
sunsetyang 2000-03-28
  • 打赏
  • 举报
回复
对不起,写错了一个字,应该是在栈中分配的。
sunsetyang 2000-03-28
  • 打赏
  • 举报
回复
你试一下将str分配足够的内存缓冲区以后,在进行从edit1->text中的复制工作。我不知道CBuilder中的WideString到底是强制类型转换还是转换后返回新的指针?VC的OLE2T的转换是在堆中重新分配内存后转换存入的。把你的GBToBig的源码贴上来一部分。

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧