使用TSocketConnection调用应用服务器的接口事件的问题

luhongjun 2001-08-19 10:29:26
加精
应用服务器定义的方法如下:
//-------------------------
STDMETHODIMP TPGDynamicSQLDemoImpl::GetAllTables(TVariant* vTables)
{
__try
{
TStringList * tblList = new TStringList();
PGDynamicSQLDemo->adocDSQL->GetTableNames(tblList,false);
int Bounds[2]={0,1};
vTables=VarArrayCreate(Bounds,tblList->Count-1,varVariant);
for (int i=1;i<tblList->Count;i++)
vTables[i]=tblList->Strings[i];
delete tblList;
}
__finally
{
return S_OK;
}

}
//-------------------------
STDMETHODIMP TPGDynamicSQLDemoImpl::AAAA(BSTR ABC)
{
__try
{
AnsiString abcd=AnsiString(ABC);
Application->MessageBox(abcd.c_str(), NULL, MB_OK);
}
__finally
{
return S_OK;
}
}
使用TDCOMConnection调用正常,但把TDCOMConnection换成TSocketConnection就有问题,TSocketConnection服务已启动,能够在服务器端显示对话框,但运行结束提示AV错误。

Variant vtblList;
IPGDynamicSQLDemoDisp PGDynamicSQLDemo;
__try
{
if (!DCOMConnection1->Connected)
DCOMConnection1->Connected=true;
PGDynamicSQLDemo.Bind(DCOMConnection1->GetServer());
//PGDynamicSQLDemo->GetAllTables(vtblList);
PGDynamicSQLDemo->AAAA(WideString("aaaaaaaa"));

}
__finally
{
if (PGDynamicSQLDemo.IsBound())
PGDynamicSQLDemo.Unbind();
return;
}

大家帮忙看一看。
...全文
329 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
blucecat 2001-08-29
  • 打赏
  • 举报
回复
up
luhongjun 2001-08-21
  • 打赏
  • 举报
回复
问题已经解决:换上2000就可以了
Variant vtblList;
__try
{
if (!SocketConnection1->Connected)
SocketConnection1->Connected=true;
IDispatch* disp = (IDispatch*)(SocketConnection1->AppServer);
IPGDynamicSQLDemoDisp PGDynamicSQLDemo( (IPGDynamicSQLDemo*)disp);
PGDynamicSQLDemo.AAAA(WideString("aaaaaaaa));
}
__finally
{
return;
}


HEROIN(HEROIN) :为什么在98下不行,换上2000就好用了。在98下问题出在:
IDispatch* disp = (IDispatch*)(MyConnection->AppServer)

保留一下午,晚上给分。


ppzhao 2001-08-21
  • 打赏
  • 举报
回复
up~~~~
书生 2001-08-21
  • 打赏
  • 举报
回复
哈哈,倒!~~~

刚发完帖子就看见帖子结帐了已经。
书生 2001-08-21
  • 打赏
  • 举报
回复
谁让你上班时间把我拖上来,我要是被经理开除了,马上去你们公司充数!
书生 2001-08-21
  • 打赏
  • 举报
回复
up~
老大,结帐别忘记给我1分。

@_@
孩皮妞野 2001-08-21
  • 打赏
  • 举报
回复
好。
BCB 2001-08-21
  • 打赏
  • 举报
回复
ok
HEROIN 2001-08-21
  • 打赏
  • 举报
回复
我也不知。我几乎都在2000下做。

不过98下运行也没出过错,也许是应为我用第2种方式的原因吧

luhongjun 2001-08-20
  • 打赏
  • 举报
回复
大家帮忙呀。
wangledong 2001-08-20
  • 打赏
  • 举报
回复
我也不知道,只能帮你推推了!
孩皮妞野 2001-08-20
  • 打赏
  • 举报
回复
学习!

UP!
HEROIN 2001-08-20
  • 打赏
  • 举报
回复

很久以前在拓创的论坛上我问过类似问题。当时的答案是BCB的SocketConnection不支持早期绑定,甚至有人让我死了用SocketConnection这条心.我自今也没明白何谓早期绑定,何谓晚期绑定。不过到现在为止,我还是用SocketConnection

1。这是帮助上的,好像很管用,很早前用过。
IDispatch* disp = (IDispatch*)(MyConnection->AppServer)

IMyAppServerDisp TempInterface( (IMyAppServer*)disp);

TempInterface.SpecialMethod(x,y);

2。这是我程序中的代码,大概就是所谓晚期绑定方式吧,据说速度要慢一点,不过倒是很好用,简单,也不要什么TLB,ALT之类的头文件,比较“环保”,我的最爱

cdsMain->FieldByName("SEQ")->AsInteger=SocketConnection1->AppServer.OleFunction("GetSEQ",TableName) ;
书生 2001-08-20
  • 打赏
  • 举报
回复
up~
coldbloodfox 2001-08-20
  • 打赏
  • 举报
回复
是BCB BUG
老大
在QQ上说吧
BCB 2001-08-20
  • 打赏
  • 举报
回复
也不会呀,
我只知一点皮毛
LuoGD 2001-08-20
  • 打赏
  • 举报
回复
学习!
火鸟33 2001-08-19
  • 打赏
  • 举报
回复
TSocketConnection 好像不支持自定义接口调用(主要是权限不够)
你用dcomconnection也能直接使用ip地址调用(要把权限设为everyone)
luhongjun 2001-08-19
  • 打赏
  • 举报
回复
使用TSocketConnection调用:
Variant vtblList;
IPGDynamicSQLDemoDisp PGDynamicSQLDemo;
__try
{
if (!SocketConnection1->Connected)
SocketConnection1->Connected=true;
PGDynamicSQLDemo.Bind(DCOMConnection1->GetServer());
//PGDynamicSQLDemo->GetAllTables(vtblList);
PGDynamicSQLDemo->AAAA(WideString("aaaaaaaa"));

}
__finally
{
if (PGDynamicSQLDemo.IsBound())
PGDynamicSQLDemo.Unbind();
return;
}
调用成功,在服务器上也能显示"aaaaaaaa",但返回时出错.错误为VA.


猛禽 2001-08-19
  • 打赏
  • 举报
回复
太可怕,你上线也不开QQ,真是的。
是的,DELPHI可以,我一直在用,一点问题没有。
BCB做COM的确有一些问题,除非不用BORLAND的WIZARD,直接用ATL做。
加载更多回复(5)

13,826

社区成员

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

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