三层架构,服务端不能返回字符串吗?只能返回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'

...全文
89 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
在线求解!
回复
相关推荐
发帖
网络及通讯开发
创建于2007-08-02

1300

社区成员

C++ Builder 网络及通讯开发
申请成为版主
帖子事件
创建了帖子
2011-07-24 08:52
社区公告
暂无公告