各位好
最近写一个基于Webservice的客户端程序,ws也是用delphi写的,但在调用时出现了一些问题,请各位指教一下
delphi连接webservice自动生成的代码如下,我自己修改了下
..
IWebServiceAPI = interface(IInvokable)
..function GetIWebServiceAPI(UseWSDL: Boolean; HTTPRIO: THTTPRIO): IWebServiceAPI;
var
RIO: THTTPRIO;
myIni: TiniFile;
cServer, defWSDL, defURL, defSvc, defPrt, Addr: string;
begin myIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Param.ini');
cServer := myIni.ReadString('DataSource','Server','');
myIni.Free; With HTTPRIO do
begin
defWSDL := cServer + RENT_SERVERWSDL;
defSvc := RENT_SERVERSERVICE;
defPrt := RENT_SERVERPORT;
defURL := cServer + RENT_SERVERSOAP;
end; Result := nil; if UseWSDL then
Addr := defWSDL
else
Addr := defURL; if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as IWebServiceAPI);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
现在有问题了,如果此单元直接放在exe里面调用的时候,一切正常,但是如果将该单元放在dll里面调用的时候,当debug到Result := (RIO as IWebServiceAPI);时就会出现Exception EIntfCastError的信息,导致dll不能正常工作
现在的情况是,最好也将该单元放在dll里面做成接口形式的,因为还有其他的dll需要调用它
我是不是忽略了什么,还是webservice本身就不能再dll里面调用
看网上说要加初始化什么的,我就加了下面这些,但是也不起作用
initialization
CoInitialize(nil);
finalization
CoUnInitialize;
最近写一个基于Webservice的客户端程序,ws也是用delphi写的,但在调用时出现了一些问题,请各位指教一下
delphi连接webservice自动生成的代码如下,我自己修改了下
..
IWebServiceAPI = interface(IInvokable)
..function GetIWebServiceAPI(UseWSDL: Boolean; HTTPRIO: THTTPRIO): IWebServiceAPI;
var
RIO: THTTPRIO;
myIni: TiniFile;
cServer, defWSDL, defURL, defSvc, defPrt, Addr: string;
begin myIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Param.ini');
cServer := myIni.ReadString('DataSource','Server','');
myIni.Free; With HTTPRIO do
begin
defWSDL := cServer + RENT_SERVERWSDL;
defSvc := RENT_SERVERSERVICE;
defPrt := RENT_SERVERPORT;
defURL := cServer + RENT_SERVERSOAP;
end; Result := nil; if UseWSDL then
Addr := defWSDL
else
Addr := defURL; if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as IWebServiceAPI);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
现在有问题了,如果此单元直接放在exe里面调用的时候,一切正常,但是如果将该单元放在dll里面调用的时候,当debug到Result := (RIO as IWebServiceAPI);时就会出现Exception EIntfCastError的信息,导致dll不能正常工作
现在的情况是,最好也将该单元放在dll里面做成接口形式的,因为还有其他的dll需要调用它
我是不是忽略了什么,还是webservice本身就不能再dll里面调用
看网上说要加初始化什么的,我就加了下面这些,但是也不起作用
initialization
CoInitialize(nil);
finalization
CoUnInitialize;
顺便说一下,HTTPRIO是带进去的,不是动态创建的
谁要是能帮解决,500分相赠,这个帖不够再开个帖
Seamour请来 http://topic.csdn.net/u/20090206/13/047e2782-66d6-4a11-aff9-2d532d2470a3.html 200分
http://topic.csdn.net/u/20090206/13/b0ec8749-16df-4795-9395-bf67f64fea55.html 100分