怎样通过JNI的java端调试VC端dll中的函数 使用JNI调用VC的win32 Dynamic-Link Library dll,都可以.但是想通过java的对话框界面调试dll中的函数,不知道怎么调试.请大家多提供帮助. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 例子package com.dayang.util;/** * 这个类通过dll访问域用户的信息,从而知道这个用户是否经过 了认证 * @author red * @version 1.0 2004-9-3 */public class DomainUserAuthenticator { /** * 用户是否得到认证 * @param userId 用户ID * @param password 用户密码 * @return */ public synchronized native boolean authenticate(String userId, String password); /**取到用户所属的组 * @param userId 用户ID * @return 用逗号隔开的组的字符串 */ public synchronized native String getGroups(String userId); public synchronized native String getRealName(String userId); static { try { System.loadLibrary("DOMAIN_USER"); } catch (UnsatisfiedLinkError e) { e.printStackTrace(); } catch (SecurityException securityexception) { securityexception.printStackTrace(); } } public static void main(String[] args) { DomainUserAuthenticator authenticator = new DomainUserAuthenticator(); System.out.println( "return:" + authenticator.authenticate("ss","ss")); System.out.println( "return:" + authenticator.authenticate("sssdfdsdf","sfsafss")); String s = authenticator.getGroups("zuoxiaojun"); System.out.println("s:" + s); String realname=authenticator.getRealName("red"); System.out.println("realname:"+realname); }} 用javah生成一个c的头文件,然后实现这个cpp,做一个dll,上层应用象使用普通的java类那样用就可以了。 好像不行吧,java怎么能够调试 dll呢?最好还是从vc中启动调式该dll吧! 在VC里的DLL多加点调试信息吧..多用点try ...catch....... 我加了PACKAGE之后,虽然可以成功的生成DLL,也一封封装好了,但是在主程序中使用package martin;public class xxx{}//这个是生成头文件的那个java之后用VC编写了DLL文件。不知道这里如果使用了PACKAGE以后,对DLL的编写用不用改import martin.*class yyy{}//在这里调用的时候就出现问题了,说是无法调用martin.*里面的那个class。有知道的高手么?我的MSN是[email protected] 看你的Java编辑器是否支持remote调试, 如intellJ中就可以,在VC的project-->settting-->debug设置java运行java程序,并启动远程服务端调试模式, 即VC中dll以server的方式启动JVM, intellJ中为client, 使用socket attch的方式连接到这个JVM。VC:java -classpath %javaclasses% -Xdebug -Xnoagent -Djava.complier=NONE -Xrunjdwp=transport:dt_socket,server=y,suspend=y,address=5005 HelloWorld其中helloworld为java启动类, suspend=y, 启动JVM后处于挂起状态,否则她就直接运行Java程序了,这样可以等待client来连接到server JVM.IntellJ, Jbuilder:设置remote debug debug mode = attachHost = localhost or target IPaddress=5005这样配置好以后,在VC中设置断点,从IntellJ中,启动debug就可以进行调试了。 不是很清楚,这里有些JNI的文章,楼主看看:http://www.graphics.net.cn/article/java/java_jni_vc6.asphttp://www.graphics.net.cn/article/java/java_jni_string.asphttp://www.graphics.net.cn/article/java/java_jni_skill.asphttp://www.graphics.net.cn/article/java/java_jni_skill_2.asphttp://www.graphics.net.cn/article/java/java_jni.asp 求有禁手的五子棋判赢算法 ★★★★★要求换回以前的版式风格,支持者进!★★★★★ 数组排序 急急急!!!如何关闭当前JFrame窗口? 奇怪的问题 关于JComboBox和数据类型转换 初学用jdk1.4还是jdk1.5? 怎样使jComboBox不可用,但不变灰 如何使JBuilder中的窗体处于屏幕中央 为什么我在JBuilder5中无法在调试中进入方法内部? 想用JFrame在一个时钟,时钟的背景是一个JLabel,但是时钟的针不好搞,怎么处理时钟的绘制和动画效果? JAVA 通过JNI如NT SERVICE 通信
package com.dayang.util;/**
* 这个类通过dll访问域用户的信息,从而知道这个用户是否经过 了认证
* @author red
* @version 1.0 2004-9-3
*/
public class DomainUserAuthenticator {
/**
* 用户是否得到认证
* @param userId 用户ID
* @param password 用户密码
* @return
*/
public synchronized native boolean authenticate(String userId, String password); /**取到用户所属的组
* @param userId 用户ID
* @return 用逗号隔开的组的字符串
*/
public synchronized native String getGroups(String userId); public synchronized native String getRealName(String userId); static {
try {
System.loadLibrary("DOMAIN_USER");
} catch (UnsatisfiedLinkError e) {
e.printStackTrace();
} catch (SecurityException securityexception) {
securityexception.printStackTrace();
}
} public static void main(String[] args) {
DomainUserAuthenticator authenticator = new DomainUserAuthenticator();
System.out.println( "return:" + authenticator.authenticate("ss","ss"));
System.out.println( "return:" + authenticator.authenticate("sssdfdsdf","sfsafss"));
String s = authenticator.getGroups("zuoxiaojun");
System.out.println("s:" + s);
String realname=authenticator.getRealName("red");
System.out.println("realname:"+realname);
}}
使用
package martin;
public class xxx{}
//这个是生成头文件的那个java
之后用VC编写了DLL文件。不知道这里如果使用了PACKAGE以后,对DLL的编写用不用改import martin.*
class yyy{}
//在这里调用的时候就出现问题了,说是无法调用martin.*里面的那个class。
有知道的高手么?
我的MSN是[email protected]
设置java运行java程序,并启动远程服务端调试模式, 即VC中dll以server的方式启动JVM, intellJ中为client, 使用socket attch的方式连接到这个JVM。VC:java -classpath %javaclasses% -Xdebug -Xnoagent -Djava.complier=NONE -Xrunjdwp=transport:dt_socket,server=y,suspend=y,address=5005 HelloWorld其中helloworld为java启动类, suspend=y, 启动JVM后处于挂起状态,否则她就直接运行Java程序了,这样可以等待client来连接到server JVM.IntellJ, Jbuilder:
设置remote debug
debug mode = attach
Host = localhost or target IP
address=5005这样配置好以后,在VC中设置断点,从IntellJ中,启动debug就可以进行调试了。