差哪呢?任凭不好?在XP下D7调用DXE的DLL就是不成呢?
时间:2011-11-12
来源:互联网
             用DelphiXE在WIN2008下编写一个访问WebServices的DLL ws.dll,只有一个输出函数,如下:
function Login(URL:PAnsiChar; UserName: PAnsiChar; UserPass: PAnsiChar; LocalLogin: Boolean):PAnsiChar;
var
tStr:String;
begin
try
Result := PAnsiChar(GetLoginSoap(True,URL + WSDL_Login,nil).Login(UserName,UserPass,LocalLogin));
tStr := '成功';
except
tStr := '调用 Web 服务失败!';
end;
ShowMessage(tStr);
end;
调用程序在XP下用DELPHI7编写,
采用静态连接:
function Login(URL:PAnsiChar; UserName: PAnsiChar; UserPass: PAnsiChar; LocalLogin: Boolean):PAnsiChar;stdcall;external 'ws.dll';
编译都通过,运行后,提示“调用 Web 服务失败!”,应该是执行WebServices调用失败了。
PAnsiChar(GetLoginSoap(True,URL + WSDL_Login,nil).Login(UserName,UserPass,LocalLogin));
但是,在Win2008下用DelphiXE编写调用程序,提示“成功”。
将D7写的调用程序拷贝到WIN2008下执行,调用成功!!!!
Dxe写的调用程序在XP和WIN2008下执行都成功。
我怀疑问题可能出在D7调用DLL时传递的PAnsiChar与DXE不兼容?将函数改成如下过程,避免传入传出参数
procedure Login1();
var
tStr:String;
begin
try
GetAuthenticationSoap(True,'http://192.168.13.1/' + WSDL_Authentication,nil).Login('abc','abc',False);
tStr := '成功';
except
tStr := 'ER:调用 Web 服务失败!';
end;
ShowMessage(tStr);
end;
结果,测试情况和之前一样,
D7写的调用程序,在XP下调用失败,在WIN2008下调用成功。
DXE写的调用程序,在XP,WIN2008下都调用成功。
后来我又用C#写了一个调用程序,结果和DXE一样,在XP,WIN2008下都调用成功。
我滴个神啊! 我该怎么办?
通过procedure Login1();可以看出问题不是处在D7调用DXE写的DLL传参数问题。
应该是下面这句
GetAuthenticationSoap(True,'http://192.168.13.1/' + WSDL_Authentication,nil).Login('abc','abc',False);
执行WebServices函数的语句出错了。
我再想,是不是DXE编写的调用WebServices程序需要什么其他的库支持。
可把DXE写的调用程序和WS.DLL拷贝到XP下,调用好使,说明不缺库。
可D7写的调用程序,为什么在XP下不好使,拷贝到WIN2008下就好使?
自己都说乱了。总结一下,问题现象是:
D7 + WS.DLL 在XP下调用WebServices不成功,在WIN2008下成功
DXE+ WS.DLL 在XP和WIN2008下都成功
C# + WS.DLL 在XP和WIN2008下都成功
我现在就想要 D7+WS.DLL在XP下好使,怎么办?
            
            function Login(URL:PAnsiChar; UserName: PAnsiChar; UserPass: PAnsiChar; LocalLogin: Boolean):PAnsiChar;
var
tStr:String;
begin
try
Result := PAnsiChar(GetLoginSoap(True,URL + WSDL_Login,nil).Login(UserName,UserPass,LocalLogin));
tStr := '成功';
except
tStr := '调用 Web 服务失败!';
end;
ShowMessage(tStr);
end;
调用程序在XP下用DELPHI7编写,
采用静态连接:
function Login(URL:PAnsiChar; UserName: PAnsiChar; UserPass: PAnsiChar; LocalLogin: Boolean):PAnsiChar;stdcall;external 'ws.dll';
编译都通过,运行后,提示“调用 Web 服务失败!”,应该是执行WebServices调用失败了。
PAnsiChar(GetLoginSoap(True,URL + WSDL_Login,nil).Login(UserName,UserPass,LocalLogin));
但是,在Win2008下用DelphiXE编写调用程序,提示“成功”。
将D7写的调用程序拷贝到WIN2008下执行,调用成功!!!!
Dxe写的调用程序在XP和WIN2008下执行都成功。
我怀疑问题可能出在D7调用DLL时传递的PAnsiChar与DXE不兼容?将函数改成如下过程,避免传入传出参数
procedure Login1();
var
tStr:String;
begin
try
GetAuthenticationSoap(True,'http://192.168.13.1/' + WSDL_Authentication,nil).Login('abc','abc',False);
tStr := '成功';
except
tStr := 'ER:调用 Web 服务失败!';
end;
ShowMessage(tStr);
end;
结果,测试情况和之前一样,
D7写的调用程序,在XP下调用失败,在WIN2008下调用成功。
DXE写的调用程序,在XP,WIN2008下都调用成功。
后来我又用C#写了一个调用程序,结果和DXE一样,在XP,WIN2008下都调用成功。
我滴个神啊! 我该怎么办?
通过procedure Login1();可以看出问题不是处在D7调用DXE写的DLL传参数问题。
应该是下面这句
GetAuthenticationSoap(True,'http://192.168.13.1/' + WSDL_Authentication,nil).Login('abc','abc',False);
执行WebServices函数的语句出错了。
我再想,是不是DXE编写的调用WebServices程序需要什么其他的库支持。
可把DXE写的调用程序和WS.DLL拷贝到XP下,调用好使,说明不缺库。
可D7写的调用程序,为什么在XP下不好使,拷贝到WIN2008下就好使?
自己都说乱了。总结一下,问题现象是:
D7 + WS.DLL 在XP下调用WebServices不成功,在WIN2008下成功
DXE+ WS.DLL 在XP和WIN2008下都成功
C# + WS.DLL 在XP和WIN2008下都成功
我现在就想要 D7+WS.DLL在XP下好使,怎么办?
作者: kim_fu 发布时间: 2011-11-12
             Delphi XE:PAnsiChar
Delphi 7 :PChar
            Delphi 7 :PChar
作者: LoveMit 发布时间: 2011-11-13
 相关阅读 更多  
      
    热门阅读
-   office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具 office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具阅读:74 
-   如何安装mysql8.0 如何安装mysql8.0阅读:31 
-   Word快速设置标题样式步骤详解 Word快速设置标题样式步骤详解阅读:28 
-   20+道必知必会的Vue面试题(附答案解析) 20+道必知必会的Vue面试题(附答案解析)阅读:37 
-   HTML如何制作表单 HTML如何制作表单阅读:22 
-   百词斩可以改天数吗?当然可以,4个步骤轻松修改天数! 百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!阅读:31 
-   ET文件格式和XLS格式文件之间如何转化? ET文件格式和XLS格式文件之间如何转化?阅读:24 
-   react和vue的区别及优缺点是什么 react和vue的区别及优缺点是什么阅读:121 
-   支付宝人脸识别如何关闭? 支付宝人脸识别如何关闭?阅读:21 
-   腾讯微云怎么修改照片或视频备份路径? 腾讯微云怎么修改照片或视频备份路径?阅读:28 















