java中怎样调用C#写的dll 如题, 急啊! 可不可以说得详细点,我是java初学者 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 jcom.jar,jcom.dll实例代码如下import jp.ne.so_net.ga2.no_ji.jcom.*;import java.util.*;public class NativeTest { private ReleaseManager rm; private IDispatch cmbcdll; public NativeTest() { rm = new ReleaseManager(); try { cmbcdll = new IDispatch(rm, "yourregisteddll"); } catch (Exception e) { e.printStackTrace(); } }//读取证书,若读取成功返回Base64编码的字符串,否则返回null public String readCert(String certpath) { Object[] param = new Object[] { certpath}; String retcode = null; try { cmbcdll.method("readcert", param); retcode = (String) cmbcdll.get("cert"); } catch (Exception e) { e.printStackTrace(); } return retcode; }//制作数字信封,若制作成功返回Base64编码的字符串,否则返回null public String EnvelopData(String srcstring, String bankcert, String usercert, String password) { Object[] param = new Object[] { srcstring, bankcert, usercert, password}; String retcode = null; try { cmbcdll.method("EnvelopData", param); if(((Integer)cmbcdll.get("retCode")).equals(new Integer(0))){ retcode=(String)cmbcdll.get("EnveData"); } } catch (Exception e) { e.printStackTrace(); } return retcode; } //商户端解密,若解密成功返回Base64编码的字符串,否则返回null public String DecryptData (String encryptstring,String bankcert,String usercert,String password){ Object [] param=new Object[]{encryptstring,bankcert,usercert,password}; String retcode=null; try{ cmbcdll.method("DecryptData",param); if(((Integer)cmbcdll.get("retCode")).equals(new Integer(0))){ retcode=(String)cmbcdll.get("DecrData"); } }catch(Exception e){ e.printStackTrace(); } return retcode; }} 1.首先的有.dll的.h文件既API说明2.写java代码你的方法应是调用本地方法的如: ...//包装本地方法的java方法void foo(){ nativeFoo();}//声明本地方法的调用方法native void nativeFoo(); ...3.编译上面的.java文件会生成.class文件4.用javah yourclasssname生成jni的头文件*.h5.建立一个c/c++的工程(DLL)实现你的头文件的方法6.编译后生成yourcppname.dll7.把yourcppname.dll考到classpath路径下在2.步的你的.java类中加入static{ System.out.loadLibrary("yourcppname");}后重新编译8.执行重新编译后的.class Java的GC机制到底怎么回事 序列化小问题 一道面试编程题(只有10分了...汗) 关于打包的问题!希望大家帮忙 关于容器与TOSTRING()函数的混合问题! applet和servlet调用一个jar里的类,这个jar包应该放在哪里? —*—*—*—我的問題,保證快速結賬—*—*—*— 关于eclipse+ant的问题 Java 小小算法问题 Java-多线程同步疑问 小弟初学JAVA,请各位大哥哥大姐姐开出一个书单,循序渐进的学习,小弟先谢拉! 读Azureus的源代码的问题??谢谢
实例代码如下
import jp.ne.so_net.ga2.no_ji.jcom.*;
import java.util.*;public class NativeTest {
private ReleaseManager rm;
private IDispatch cmbcdll;
public NativeTest() {
rm = new ReleaseManager();
try {
cmbcdll = new IDispatch(rm, "yourregisteddll");
}
catch (Exception e) {
e.printStackTrace();
}
}
//读取证书,若读取成功返回Base64编码的字符串,否则返回null
public String readCert(String certpath) {
Object[] param = new Object[] {
certpath};
String retcode = null;
try {
cmbcdll.method("readcert", param);
retcode = (String) cmbcdll.get("cert");
}
catch (Exception e) {
e.printStackTrace();
}
return retcode;
}
//制作数字信封,若制作成功返回Base64编码的字符串,否则返回null
public String EnvelopData(String srcstring, String bankcert, String usercert,
String password) {
Object[] param = new Object[] {
srcstring, bankcert, usercert, password};
String retcode = null;
try {
cmbcdll.method("EnvelopData", param);
if(((Integer)cmbcdll.get("retCode")).equals(new Integer(0))){
retcode=(String)cmbcdll.get("EnveData");
}
}
catch (Exception e) {
e.printStackTrace();
}
return retcode;
}
//商户端解密,若解密成功返回Base64编码的字符串,否则返回null
public String DecryptData (String encryptstring,String bankcert,String usercert,String password){
Object [] param=new Object[]{encryptstring,bankcert,usercert,password};
String retcode=null;
try{
cmbcdll.method("DecryptData",param);
if(((Integer)cmbcdll.get("retCode")).equals(new Integer(0))){
retcode=(String)cmbcdll.get("DecrData");
} }catch(Exception e){
e.printStackTrace();
}
return retcode;
}
}
2.写java代码你的方法应是调用本地方法的如:
...
//包装本地方法的java方法
void foo()
{
nativeFoo();
}
//声明本地方法的调用方法
native void nativeFoo();
...
3.编译上面的.java文件
会生成.class文件
4.用javah yourclasssname生成jni的头文件*.h
5.建立一个c/c++的工程(DLL)实现你的头文件的方法
6.编译后生成yourcppname.dll
7.把yourcppname.dll考到classpath路径下在2.步的你的.java类中加入
static
{
System.out.loadLibrary("yourcppname");
}后重新编译
8.执行重新编译后的.class