社区
控件与界面
帖子详情
紧急求救:APServer回调Client时产生异常:“应用程序调用一个已为另一个线程整理的界面”
cfm999
2002-08-16 09:48:03
环境:win2000(Server and Client), COM+, Delphi 5
(win98,MTS, D5时没问题)
我的分用不完,不够再加.
...全文
86
6
打赏
收藏
紧急求救:APServer回调Client时产生异常:“应用程序调用一个已为另一个线程整理的界面”
环境:win2000(Server and Client), COM+, Delphi 5 (win98,MTS, D5时没问题) 我的分用不完,不够再加.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cld
2002-08-28
打赏
举报
回复
对不起,几天没上网,我也不能解决你发现的问题,我觉得要不你还是考虑一下你的控件的套间模型的问题,祝你好运。
cfm999
2002-08-28
打赏
举报
回复
我已经找到了一个笨法解决,多谢关注,以后还要向你请教!
我在10:00前已经结帖了,在贴尾无结帖标志,一般的浏览也看不见,但在管理中能看到
你在8-24 12:47:11回复得分100,不知你收到分否?
cld
2002-08-24
打赏
举报
回复
对不起,我使用的是VC,不是DEPHI,那么我猜测的说一下吧。但是从COM的标准来说,回调的实现必须通过传递一个回调接口的指针来完成,不能简单的通过传递一个函数的指针来实现,我觉得你应该将必须回调的函数封装在一个接口中,TmtsClient支持这个接口,将该接口的指针传递给TmtsServer,大概能解决问题。
cfm999
2002-08-24
打赏
举报
回复
我传递的是接口:IDispatch
constructor TmtsClient.Create;
..
begin
...
mtsServer.SetCallBack(Self as IDispatch);
...
end;
哎,主要还是我对COM不懂,也没时间学就开做,
结果倒误事了。
cfm999
2002-08-22
打赏
举报
回复
to cld(陈雷动): 多谢!
我的使用如下:
环境:win2000(Server and Client), Com+, Delphi 5
(win98,MTS, D5没问题)
TmtsServer = class(TMtsAutoObject, ImtsServer)
private
{ Private declarations }
FCallBack: OleVariant;
protected
{ Protected declarations }
procedure SetCallBack(vCookie, vCallBack: OleVariant); safecall;
procedure GetData(out vData: OleVariant); safecall;
public
{ Public declarations }
Destructor Destroy; override;
end;
procedure TmtsServer.SetCallBack(vCallBack: OleVariant);
begin
try
FCallBack := v;
SetComplete;
except
SetAbort;
raise;
end;
end;
procedure TmtsServer.GetData(out vData: OleVariant); safecall;
begin
try
FCallBack.SynchNotify; //出错,回调不了
vData := ...
SetComplete;
except
SetAbort;
raise;
end;
end;
Client端:
type
TdmAccess = class(TDataModule)
procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
FmtsClient: TmtsClient;
FmtsServer: ImtsServer;
public
{ Public declarations }
end;
TmtsClient = class(TAutoIntfObject, ImtsClient)
protected
procedure SynchNotify; safecall;
public
constructor Create; overload;
end;
procedure TdmAccess.DataModuleCreate(Sender: TObject);
var
vData: OleVariant;
begin
FmtsClient := TmtsClient.Create;
FmtsServer := ComtsServer.CreateRemote(g_strServerHost);
FmtsServer.GetData(vData);
end;
constructor TmtsClient.Create;
var
mtsSever: ImtsServer;
tlb: ITypeLib;
begin
OleCheck(LoadTypeLib('C:\CallBack.TLB', tlb));
inherited Create(tlb, ImtsClient);
mtsServer := ComtsServer.CreateRemote(g_strServerHost);
mtsServer.SetCallBack(Self as IDispatch);
end;
procedure TmtsClient.SynchNotify; safecall;
begin
...
end;
引发我的错误已找到,就是:
(1) ImtsClient传递到Server.SetCallBack(此时可以回调),
此时Marshal, 结束本次调用。
(2) Server.GetData被调用(也可能是另一个Client),此时
Unmarshal,可以回调。
现在的问题是:
ImtsClient要重复使用,如何保存Marshal后的IStream???
cld
2002-08-20
打赏
举报
回复
具体的讲一下您的DLL的套间模型是什么?
Duter2016#Duter2016.github.io#2021-06-01-2021年6月歌单欣赏1
title: 2021年6月歌单欣赏 # 标题subtitle: 我的网易云音乐歌单 #副标题music-id: # 网易云音乐单曲嵌入
ap
server
: ne
Duter2016#Duter2016.github.io#2021-05-01-2021年5月歌单欣赏1
title: 2021年5月歌单欣赏 # 标题subtitle: 我的网易云音乐歌单 #副标题music-id: # 网易云音乐单曲嵌入
ap
server
: ne
Duter2016#Duter2016.github.io#2020-07-01-2020年7月歌单欣赏1
title: 2020年7月歌单欣赏 # 标题subtitle: 我的网易云音乐歌单 #副标题music-id: # 网易云音乐单曲嵌入
ap
server
: ne
制鞋源碼
1. SQL2000 資料庫名 WLSHOE sa 密碼請改為3388 . 或者拿到源碼後去
AP
SERVER
端改成你自已用的 2. BDE WLSHOE 3. WLClinet 執行時初始用戶為TEST 4.請先記得你的midas.dll 有注冊, inscktsrvr.exe 先運行或注冊. 5.如果你要編譯,源碼用到的控件. DBGirdEh, FastReport, DosMove. ChinaBCB上有. 6.因這是為台灣公司做的,是繁體版本.如果你需要,可以去找找工具將源碼裡的中文轉換一下.
AP
htmlconfig.ino.generic.bin
适合测试ESP8266模块(支持ESP8266 01和12系列)下载自行烧录,方法见相关文档介绍。
AP
热点JIUAI-8266无密码登录,然后手机打开网页192.168.4.1即可进入配网模式 输入您的WIFI账号密码连接即可。成功后可以串口调试指令,内置4组测试指令(必须配网成功后执行) 1)55 AA AA AA AA 81 01 01 开灯(针脚2) 2)55 AA AA AA AA 81 01 00 关灯(针脚2) 3)hellow 打招呼回复字符串 4)restart 重启模块
控件与界面
604
社区成员
12,293
社区内容
发帖
与我相关
我的任务
控件与界面
PowerBuilder 控件与界面
复制链接
扫一扫
分享
社区描述
PowerBuilder 控件与界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章