三层应用, RO 服务端出现"尚未调用 CoInitialize"错误。(200)

  • 主题发起人 主题发起人 yanghaijun
  • 开始时间 开始时间
Y

yanghaijun

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi7 + RemObjectsV5.0.29.665 + SQL2005 数据库 建立一个简单的三层应用服务器端:建立一个新的应用,在主窗口中放置: TfrmMain = class(TForm) msg_BIN: TROBinMessage;
msg_SOAP: TROSOAPMessage;
HTTPServer: TROIndyHTTPServer;
procedure FormCreate(Sender: TObject);
private { Private declarations } public { Public declarations } end;
...procedure TfrmMain.FormCreate(Sender: TObject);
begin
try HTTPServer.Active:=True;
except On E:Exceptiondo
Application.MessageBox(pchar(E.Message),'错误',MB_OK+MB_ICONERROR);
end;
end;
添加一个 TRODataSnapModule 模块: TRODataSnapModule1 = class(TRODataSnapModule) ADOConnection: TADOConnection;
dspCommon: TDataSetProvider;
ADOQuery: TADOQuery;
procedure ADOConnectionBeforeConnect(Sender: TObject);
private { Private declarations } public { Public declarations } end;
客户端,很简单: TfrmMain = class(TForm) RODataSnapConnection1: TRODataSnapConnection;
ROBinMessage1: TROBinMessage;
DBGrid1: TDBGrid;
ROWinInetHTTPChannel1: TROWinInetHTTPChannel;
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
procedure FormCreate(Sender: TObject);
private { Private declarations } public { Public declarations } end;
...procedure TfrmMain.FormCreate(Sender: TObject);
begin
ClientDataSet1.Open;
end;
运行服务端后,再启动客户端,结果服务端会回传一个错误信息到客户端:An exception was rasied on the server: 尚未调用 CoInitialize。该如何解决?
 
自己解决的方法,在 RO 源码中加入相关的代码(引用 ActiveX):constructor TRORemoteDataModule.Create(aOwner: TComponent);
begin
CoInitialize(nil);
//添加 inherited Create(aOwner);
end;
destructor TRORemoteDataModule.Destroy;
begin
SessionManager := nil;
EventRepository := nil;
FreeAndNIL(fRetainedObjects);
CoUninitialize;
//添加 inherited;
end;
不知道大家有什么别的方法或经验而不需要修改源码的?
 
这个肯定是要加的,如果你使用com对象。微软的技术要求就是这样的。而且这样我觉得也并不麻烦。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部