三层架构,服务端不能返回字符串吗?只能返回long!求解!

v1srine 2011-07-24 08:52:03
接口代码
STDMETHODIMP TcthreeImpl::GetC(BSTR B, VARIANT* A)
{
Form1->Caption = B;
return “测试”;
}


接收字符串没有问题。
但是不能返回字符串到客户端!

[BCC32 Error] Unit2.cpp(34): E2034 Cannot convert 'const char *' to 'long'

...全文
111 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
v1srine 2011-07-25
  • 打赏
  • 举报
回复
求解!
v1srine 2011-07-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ksrsoft 的回复:]
C/C++ code
TForm1::fun(BSTR *s)
{
WideString w;
w = "abc";
*s = w;
//或者
*s = WideString( "abc").c_bstr();
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{

WideS……
[/Quote]

STDMETHODIMP TcthreeImpl::GetC(BSTR B, BSTR* A)
{
Form1->Caption = B;
*A = WideString( "abc").c_bstr();
}


Checking project dependencies...
Compiling Project1.cbproj (Debug configuration)
[BCC32 Warning] Unit2.cpp(35): W8070 Function should return a value
Full parser context
Unit2.cpp(32): parsing: long __stdcall TcthreeImpl::GetC(wchar_t *,wchar_t * *)
[ILINK32 Error] Error: Unresolved external '__stdcall TcthreeImpl::GetC(wchar_t *, tagVARIANT *)' referenced from C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\桌面\C++\THREE\SERVER\DEBUG\PROJECT1.OBJ
[ILINK32 Warning] Warning: Duplicate resource: Type TYPELIB, ID 1; File C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\LOCAL SETTINGS\TEMP\VFS325E.TMP resource kept; file C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\桌面\C++\THREE\SERVER\PROJECT1.TLB resource discarded.
[ILINK32 Error] Error: Unable to perform link
Failed
Elapsed time: 00:00:00.9
缘中人 2011-07-24
  • 打赏
  • 举报
回复
TForm1::fun(BSTR *s)
{
WideString w;
w = "abc";
*s = w;
//或者
*s = WideString( "abc").c_bstr();
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{

WideString w;
fun(&w);
Caption = w;
}
v1srine 2011-07-24
  • 打赏
  • 举报
回复

STDMETHODIMP TcthreeImpl::GetC(BSTR B, BSTR* A)
{
Form1->Caption = B;
*A = "测试";
}
v1srine 2011-07-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ksrsoft 的回复:]
增加一个bstr*类型,选择retval打勾

然后给这个参数赋值(就是函数的返回值)
STDMETHODIMP TcthreeImpl::GetC(BSTR B, BSTR *RETSTR)
{
*RETSTR = "ABC";
}

大概是这样的思路。
[/Quote]



*RETSTR 这个东东不能返回数据哦 - -
缘中人 2011-07-24
  • 打赏
  • 举报
回复
BSTR *
选择BSTR,然后在后面输入符合*就可以了。
v1srine 2011-07-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ksrsoft 的回复:]
增加一个bstr*类型,选择retval打勾

然后给这个参数赋值(就是函数的返回值)
STDMETHODIMP TcthreeImpl::GetC(BSTR B, BSTR *RETSTR)
{
*RETSTR = "ABC";
}

大概是这样的思路。
[/Quote]



.......没有bstr*类型。只有bstr

BStr 不支持返回数据。
缘中人 2011-07-24
  • 打赏
  • 举报
回复
增加一个bstr*类型,选择retval打勾

然后给这个参数赋值(就是函数的返回值)
STDMETHODIMP TcthreeImpl::GetC(BSTR B, BSTR *RETSTR)
{
*RETSTR = "ABC";
}

大概是这样的思路。
v1srine 2011-07-24
  • 打赏
  • 举报
回复
DELPHI 代码

function Tgetsql.putdata(const new3: WideString): OleVariant;
begin
Form1.caption := new3;
Result := '返回字符串';
end;
v1srine 2011-07-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ksrsoft 的回复:]
A = w;
[/Quote]

也还是这样错误的 0 0.不知为何!
缘中人 2011-07-24
  • 打赏
  • 举报
回复
A = w;
v1srine 2011-07-24
  • 打赏
  • 举报
回复
WideString w;
w = "abc";
Form1->Caption = B;
*A = w;
return S_OK;

这样写 就

Cannot convert 'widestring' to 'wchar_t'
v1srine 2011-07-24
  • 打赏
  • 举报
回复
在线求解!

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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