关于“接口函数的参数传递,函数返回值”的问题

lly_oldf 2003-03-10 11:02:40
续昨

无参函数调用是成功的。今天试验传递参数出现问题。
app server 接口函数定义:

STDMETHODIMP TServerImpl::Test(LPSTR Param1)
{
ShowMessage(Param2);
return(0);
}

client 调用:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *Str;
Str="Ok";
IDispatch *Disp=(IDispatch *)(Socket->AppServer);
IServerDisp TempInterface((IServer *)Disp);
TempInterface.Test(Str);
}

编译无错,运行时无错,但是无法在服务器弹出message框。断点显示未执行接口函数。不知何故。希望能将“接口函数返回值”的方法也告诉在下。
...全文
97 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lly_oldf 2003-03-10
  • 打赏
  • 举报
回复
STDMETHODIMP TServerImpl::Test(LPSTR Param1)
{
ShowMessage(Param2);//写错了,Param2应该是Param1。ShowMessage(Param1)
return(0);
}
lly_oldf 2003-03-10
  • 打赏
  • 举报
回复
在线时间:9:00---11:30
12:00---23:30
lly_oldf 2003-03-10
  • 打赏
  • 举报
回复
不用Message了,看看参数到底传过去没有。用个Edit试试看
lly_oldf 2003-03-10
  • 打赏
  • 举报
回复
To:ljwlover(天涯浪子)
你这个有语法错误吧!
lly_oldf 2003-03-10
  • 打赏
  • 举报
回复
再试试看,真不甘心用delphi!
天涯浪子 2003-03-10
  • 打赏
  • 举报
回复
我给你改一下,你再试试:
app server 接口函数定义:

STDMETHODIMP TServerImpl::Test(BSTR Param1)
{
ShowMessage(Param1);
return(0);
}

client 调用:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
WideString Str;
Str="Ok";
IDispatch *Disp=(IDispatch *)(Socket->AppServer);
IServerDisp TempInterface((IServer *)Disp);
TempInterface.Test(&Str);
}
albeta 2003-03-10
  • 打赏
  • 举报
回复
这是CBuilder自身的缺陷,不是在任何时候,都可以用ShowMessage弹出对话框的,在线程中单布调试可以实现,但是运行就不行。
lly_oldf 2003-03-10
  • 打赏
  • 举报
回复
不行啊,还是没有message弹出来。
lly_oldf 2003-03-10
  • 打赏
  • 举报
回复
好的,我试试看。还有返回值的问题。是不是也用接口函数名作为首地址传递返回值?具体怎么做?
ThinkX 2003-03-10
  • 打赏
  • 举报
回复
你的做法不符合COM规范的,

IServerDisp TempInterface((IServer *)Disp);
TempInterface.Test(Str);

改成试试

IServer* pServer = NULL;
HRESULT hr = Disp->QueryInterface(&pServer);
if (SUCCEEDED(hr))
{
pServer->Test(Str);
pServer->Release();
}

另外写Com程序时最好不要return 0;用return S_OK;更好些。

1,316

社区成员

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

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