近期和别的公司做接口,对方是 WebService ,这样我们需要在 owerBuilder6.5 中进行调用。在 Google 等上找了找,发觉都是采用 MSSOAP.SoapClient 或者 MSXML.XMLHTTP 进行,在具体测试后发觉不是很理想,于是想是否可以直接使用
PB6 本地的 GetURL 功能进行呢?于是有了下面的方案:
首先从 internetresult 继承对象 n_ir_wsclient ,并定义实例变量 dataResult 用于保存 GetURL 的返回结果。这样就可以进行 WebService 调用了
Inet lnv_inet n_ir_wsclient lnv_wsclient Integer li_return String ls_url,ls_data
lnv_inet = Create Inet lnv_wsclient = Create n_ir_wsclient
ls_url = “http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=1380571&userID=”
li_return = lnv_inet.GetURL(ls_url, lnv_wsclient)
ls_data = String(lnv_wsclient.dataResult)
Destroy lnv_wsclient Destroy lnv_inet |
这个时候返回结果为 :
<?xml version="1.0" encoding="utf-8"?> <string xmlns="http://WebXml.com.cn/">1380571 锛氭禉姹 ? 鏉 窞 娴欐睙绉诲姩閲戝崱绁炲窞琛屽崱 </string> |
麻烦了,返回结果是 UTF-8 格式,可是 PB65 不支持直接转化,怎么办呢?最后想想还是辅助了一个 dll 吧,于是 COnvCode.dll 出炉了。
Function Integer UTF8ToAnsii(String szUTF8,Ref String szAnsiiRslt) Library "ConvCode.dll" Alias For "_UTF8ToAnsii@8" Function Integer AnsiiToUTF8(String szAnsii, Ref String szUTF8Rslt) Library "ConvCode.dll" Alias For "_AnsiiToUTF8@8" |
最后完整的调用函数也出来了
Inet lnv_inet n_ir_wsclient lnv_wsclient Integer li_return String ls_url,ls_data,ls_result Long ll_length
ls_url = arg_url // 1.URL 转 UTF-8 格式 SetNull(ls_result) ll_length = AnsiiToUTF8(ls_url,Ref ls_result) ls_result = Space(ll_length) ll_length = AnsiiToUTF8(ls_url,Ref ls_result) If ll_length < 0 Then LastError = -100 Return "" End If ls_url = ls_result
// 2 、执行 WebService lnv_inet = Create Inet lnv_wsclient = Create n_ir_wsclient
li_return = lnv_inet.GetURL(arg_url, lnv_wsclient)
ls_data = String(lnv_wsclient.dataResult)
Destroy lnv_wsclient Destroy lnv_inet
If li_return < 0 Then LastError = li_return Return "" End If
// 3 、处理返回结果, UTF-8 转 ANSII SetNull(ls_result) ll_length = UTF8ToAnsii(ls_data,Ref ls_result)
ls_result = Space(ll_length) ll_length = UTF8ToAnsii(ls_data,Ref ls_result) If ll_length < 0 Then LastError = -100 ls_result = "" End If
// 4 、返回 Return ls_result |
这样处理后返回的结果就是 PB65 可以认识的字符串了,前面例子的返回结果如下:
<?xml version="1.0" encoding="utf-8"?> <string xmlns="http://WebXml.com.cn/">1380571 :浙江 杭州 浙江移动金卡神州行卡 </string> |
附:
ConvCode.dll 的核心源代码如下:
INT
WINAPI
__declspec(
dllexport)
UTF8ToAnsii(
LPCSTR
szUTF8,
LPSTR
szAnsiRslt)
|
最新评论