打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PB调用各类WebService或c#程序

      慢慢的有很多接口pb都已经无法调用了,还有一些进制计算,位移等pb都无法实现,这时最简单的就是用c#做好,让pb调用。但是pb只能调用最基础的c++开发的标准dll。通过无数次的百度,我找到了一个好的方法,也许您已经知道了。但是我觉得还是要写出来,只要还有一个为此发愁的朋友存在。谢谢!

方法思路是:

1、​用c#写一个类,方法的参数一定要用标准数据类型,返回值也要是标准数据类型(string、int或者结构等等)。在这个方法里面调用各类webservice或其他http接口等pb无法直接调用的。

2、我正巧要做一个调用java写的webservice,下面贴出代码,供参考,因为用csc.exe编译程序无法处理引用,所以

using System;

using System.Collections.Generic;

using System.Text;

using System.Security.Cryptography;

namespace ysxt

{

    public classws

    {

       public string sendrecv(string sUser, stringsPwd)

       {

         stringretu = "";

          try

          {

             xjca.YsxtMainServiceImplService myrefe = newxjca.YsxtMainServiceImplService();//这里就是解决csc.exe无法编译引用问题的,xjca是在另外一个ysws.cs文件里,这个cs文件不是我写的,也不能写出来,这是用另外一个命令生成出来的,具体命令看本文最后备注

              myrefe.Url =myUrl;            

              retu = myrefe.sendRecv(sUser,sPwd);

          }

           catch(Exception e)

          {

              returne.Message;//一定要用try....catch,否则pb调用过程中出现错误,都没有办法知道哪里错了,这句话就是关键。

          }

           returnsSign + "\r\n" + retu;

       }

   }

}

3、​关键:将c#程序编译成PB可以调用的COM,为了调试方便,我将编译程序写成了一个bat批处理文件,和.cs程序放在一个目录里面。以下是这个bat文件脚本,很简单的。

c:

cd C:\Program Files\MicrosoftSDKs\Windows\v7.0A\bin

sn.exe -k D:\program\ysxt\ysxt\ysxt.snk

d:

cd D:\program\ysxt\ysxt\

C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe /t:library/keyfile:ysxt.snk /out:ysxt.dll ys*.cs

​简单解释一下:我写的c#程序在两个ys开头的.cs文件里面。只要这2个文件,执行这个bat批处理之后,将会在目录下出现snk文件,放着别管他。

4、注册:执行完bat之后,​程序目录下会出现一个dll文件,我的就是ysxt.dll。然后再监理一个bat文件,这个文件以后要一起给客户,他们在安装程序的时候都要执行,当你升级这个dll的时候,也要再次执行,因为光覆盖整个dll是不起作用的,要重新注册,注册用的bat文件如下:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe /uysxt.dll

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exeysxt.dll /tlb:ysxt.tlb /codebase 

再简单解释一下,这些exe文件也许在你电脑上的路径和我不同,版本也许不同,但是我喜欢用framwork2.0或 3.5版本的,这样去客户端无需安装.net framework环境

5、以下就是pb调用已经注册好的dll的方法了

OLEObject ole_1

long ll_status

stringls_ret  

//创建OLEObject对象

ole_1 = Create OLEObject

ll_status= ole_1.ConnectToNewObject("ysxt.ws")//ysxt是我c#代码中的命名空间,ws是c#代码中的类名

if ll_status <> 0then 

messagebox("打开com失败",string(ll_status))

ole_1.DisConnectObject()

return -1

end if

ls_ret =ole_1.sendrecv("aaa", "bbb"") //这是c#代码中实现接口调用的方法

 ole_1.DisConnectObject()

destroy ole_1

6、最后贴出一个遗漏的,就是如何用命令行生成webservice引用的cs文件

c:

cd C:\Program Files\MicrosoftSDKs\Windows\v7.0A\bin\

wsdl.exe /language:c# /n:xjca/out:D:\HIS1\program\ysxt\ysxt\ysws.cshttp://172.16.186.6/ysxt-wscs/service/mainservice?wsdl

这个很关键​,不用这个办法编译不了调用web引用的cs文件

7、最后说个注意事项,pb支持调用的c#方法不能是静态的,就是不能写publicstatic,只能是public。如果需要帮助,可以mail我,jinhui7@hotmail.com,我希望能帮到你,因为助人为乐。​


      慢慢的有很多接口pb都已经无法调用了,还有一些进制计算,位移等pb都无法实现,这时最简单的就是用c#做好,让pb调用。但是pb只能调用最基础的c++开发的标准dll。通过无数次的百度,我找到了一个好的方法,也许您已经知道了。但是我觉得还是要写出来,只要还有一个为此发愁的朋友存在。谢谢!

方法思路是:

1、​用c#写一个类,方法的参数一定要用标准数据类型,返回值也要是标准数据类型(string、int或者结构等等)。在这个方法里面调用各类webservice或其他http接口等pb无法直接调用的。

2、我正巧要做一个调用java写的webservice,下面贴出代码,供参考,因为用csc.exe编译程序无法处理引用,所以

using System;

using System.Collections.Generic;

using System.Text;

using System.Security.Cryptography;

namespace ysxt

{

    public classws

    {

       public string sendrecv(string sUser, stringsPwd)

       {

         stringretu = "";

          try

          {

             xjca.YsxtMainServiceImplService myrefe = newxjca.YsxtMainServiceImplService();//这里就是解决csc.exe无法编译引用问题的,xjca是在另外一个ysws.cs文件里,这个cs文件不是我写的,也不能写出来,这是用另外一个命令生成出来的,具体命令看本文最后备注

              myrefe.Url =myUrl;            

              retu = myrefe.sendRecv(sUser,sPwd);

          }

           catch(Exception e)

          {

              returne.Message;//一定要用try....catch,否则pb调用过程中出现错误,都没有办法知道哪里错了,这句话就是关键。

          }

           returnsSign + "\r\n" + retu;

       }

   }

}

3、​关键:将c#程序编译成PB可以调用的COM,为了调试方便,我将编译程序写成了一个bat批处理文件,和.cs程序放在一个目录里面。以下是这个bat文件脚本,很简单的。

c:

cd C:\Program Files\MicrosoftSDKs\Windows\v7.0A\bin

sn.exe -k D:\program\ysxt\ysxt\ysxt.snk

d:

cd D:\program\ysxt\ysxt\

C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe /t:library/keyfile:ysxt.snk /out:ysxt.dll ys*.cs

​简单解释一下:我写的c#程序在两个ys开头的.cs文件里面。只要这2个文件,执行这个bat批处理之后,将会在目录下出现snk文件,放着别管他。

4、注册:执行完bat之后,​程序目录下会出现一个dll文件,我的就是ysxt.dll。然后再监理一个bat文件,这个文件以后要一起给客户,他们在安装程序的时候都要执行,当你升级这个dll的时候,也要再次执行,因为光覆盖整个dll是不起作用的,要重新注册,注册用的bat文件如下:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe /uysxt.dll

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exeysxt.dll /tlb:ysxt.tlb /codebase 

再简单解释一下,这些exe文件也许在你电脑上的路径和我不同,版本也许不同,但是我喜欢用framwork2.0或 3.5版本的,这样去客户端无需安装.net framework环境

5、以下就是pb调用已经注册好的dll的方法了

OLEObject ole_1

long ll_status

stringls_ret  

//创建OLEObject对象

ole_1 = Create OLEObject

ll_status= ole_1.ConnectToNewObject("ysxt.ws")//ysxt是我c#代码中的命名空间,ws是c#代码中的类名

if ll_status <> 0then 

messagebox("打开com失败",string(ll_status))

ole_1.DisConnectObject()

return -1

end if

ls_ret =ole_1.sendrecv("aaa", "bbb"") //这是c#代码中实现接口调用的方法

 ole_1.DisConnectObject()

destroy ole_1

6、最后贴出一个遗漏的,就是如何用命令行生成webservice引用的cs文件

c:

cd C:\Program Files\MicrosoftSDKs\Windows\v7.0A\bin\

wsdl.exe /language:c# /n:xjca/out:D:\HIS1\program\ysxt\ysxt\ysws.cshttp://172.16.186.6/ysxt-wscs/service/mainservice?wsdl

这个很关键​,不用这个办法编译不了调用web引用的cs文件

7、最后说个注意事项,pb支持调用的c#方法不能是静态的,就是不能写publicstatic,只能是public。如果需要帮助,可以mail我,jinhui7@hotmail.com,我希望能帮到你,因为助人为乐。​


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
asp.net源程序编译为dll文件并调用过程
[原创] 在ios android设备上使用 Protobuf (使用dll方式)
什么是程序集 - 而立的日志 - 网易博客
WebService封装成.dll文件详解
解决无IISXP系统无IIS如何安装IIS
WebService-.Net:添加web引用和添加服务引用有什么区别?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服