短信网关测试 soap

来源:互联网 发布:知父莫若子txt百度云 编辑:程序博客网 时间:2024/05/02 04:17

为了使用移动的短信网关进行短信发送,我使用的是java开发,但短信发送使用的是C++编写的网关。

于是就涉及到java调用C++的情况,参照了网上各位前辈的做法,大多是使用jni的方式,都是先做dll文件,然后在java里调用,

下面附上前辈们的操作步骤:

 

第一步:编写Java代码,使用关键字native标记要用C++动态链接库来实现的方法。

如:     public native 返回类型 方法名(参数列表);

注意,这些方法没有方法体。。

程序中调用这里的方法和调用平常的方法的方式是一样的。

----------------------------------------------------------------------------------------------------------------------------------

第二步:编译该Java文件,得到.class文件,.class文件和.java文件放在同一个文件夹下面

而后用javah命令生成一个C++头文件    Javah  类名        

注意,这里是类名,而不是文件名。。 

----------------------------------------------------------------------------------------------------------------------------------

第三步:基于以生成的头文件以C++语言编写C++代码。。

C++VS2005做的,新建一个C++ WIN32项目,选中DLL。。

.cpp源文件中,添加上一步自动生成的头文件的引用。接着就实现函数,

先复制函数签名,在填写函数体就可以了。编译,生成DLL文件

注意:

由于编译时要用到一些Java里面的头文件,,所以应该把位于下面目录

C:/Program Files/Java/jdk1.5.0_09/include 

中的所有文件都拷到

C:/Program Files/Microsoft Visual Studio 8/VC/include

目录下。

上面两个路径依自己的机子而定

若不拷到这里的话,也可以明确指定路径。。

要不然会报错,说找不jni.h文件;

将生成的DLL文件放在 C:/WINDOWS/system32 目录下,或者放在与Java程序位于相同的目录下。

----------------------------------------------------------------------------------------------------------------------------------

第四步:在java代码中添加代码以载入本机库。

 static{
        System.loadLibrary("
动态链接库的名字
");
     }

 

 执行程序。

按理说按以上步骤设置完就可以了,但是但是短信网关还要用到两个dll文件,msxml4.dll和mssoap30.dll,大致如下:

#import "C:/WINDOWS/system32/msxml4.dll"
#import "C:/MSSoap/Binaries/MSSOAP30.dll"
using namespace MSSOAPLib30;

 

在VC里面编译遇到了类似__missing_type__的错误,问题纠结了好久。

最后经检查以上两个dll都不是系统预装的,于是从网上下载了两个安装文件msxml4-KB927978-chs.exe和SoapToolkit30.zip,分别安装,然后把C:/Program Files/Common Files/MSSoap文件夹直接拷贝到C盘下(因为这里的路径带有空格,等下注册的时候会提示找不到模块),然后注册dll,在命令行下分别输入:regsvr32 msxml32.dll和regsvr32 C:/MSSoap/Binaries/MSSOAP30.dll,至此注册完成,返回从上面第一步开始,短信测试成功。

(msxml4-KB927978-chs.exe和SoapToolkit30.zip在我的下载里面)

原创粉丝点击