java调用dll

dll相关

lib 和 dll 的区别、生成以及使用详解

调用易语言的dll

1.找到jna的jar包并加入到库
可在github上找到
2.具体用法可参考https://blog.csdn.net/weixin_39598501/article/details/111258154

示例
环境jdk8-32位

package com.company;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

/*每个dll写一个接口类,并声明dll里的函数,难点在于数据类型对应*/
/*调用c语言的dll,接口名自己起,注意最后一个参数是接口名.class*/
interface CLibrary extends Library {
    CLibrary INSTANCE = (CLibrary) Native.load((Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);

    void printf(String format, Object... args);

}

/*调用易语言的dll,接口名自己起,注意最后一个参数是接口名.class*/
interface ELibrary extends Library {
    ELibrary INSTANCE = (ELibrary) Native.load((Platform.isWindows() ? "com.sdk.demo.vlw" : "c"), ELibrary.class);
/*易语言中的dll函数声明
.子程序 EventPrivateChat, 文本型, 公开, 私聊消息事件(收到私聊消息时,运行这里)
.参数 robot_wxid, 文本型, , 机器人Wxid
.参数 type, 整数型, , 1/文本消息 3/图片消息 34/语音消息  42/名片消息  43/视频 47/动态表情 48/地理位置  49/分享链接  2001/红包  2002/小程序  2003/群邀请
.参数 from_wxid, 文本型, , 来源用户ID
.参数 from_name, 文本型, , 来源用户昵称
.参数 msg, 文本型, , 消息内容
.参数 clientid, 整数型, , 企业微信可用
.参数 robot_type, 整数型, , 来源微信类型 0 正常微信 / 1 企业微信
*/
//对应的java函数声明如下
    int EventPrivateChat(String robot_wxid, int type,String from_wxid,String from_name,String msg,int clientid,int robot_type);

/*易语言中的dll函数声明
.子程序 EventGroupChat, 整数型, 公开, 群消息事件(收到群消息时,运行这里)
.参数 robot_wxid, 文本型, , 机器人Wxid
.参数 type, 整数型, , 1/文本消息 3/图片消息 34/语音消息  42/名片消息  43/视频 47/动态表情 48/地理位置  49/分享链接  2001/红包  2002/小程序  2003/群邀请 更多请参考sdk模块常量值
.参数 from_group, 文本型, , 来源群号
.参数 from_group_name, 文本型, , 来源群名称
.参数 from_wxid, 文本型, , 具体发消息的群成员id
.参数 from_name, 文本型, , 具体发消息的群成员昵称
.参数 msg, 文本型, , 消息内容
.参数 msg_source, 文本型, , 可选,附带属性(群消息有艾特人员时,返回被艾特数组)
.参数 clientid, 整数型, , 企业微信可用
.参数 robot_type, 整数型, , 来源微信类型 0 正常微信 / 1 企业微信
*/
//对应的java函数声明如下
    int EventGroupChat(String robot_wxid,int type,String from_group,String from_group_name,String from_wxid,String from_name,String msg,String msg_source,int clientid,int robot_type);
}

public class Main {

    public static void main(String[] args) {
        System.out.println(Platform.isWindows());//判断当前平台,用来测试jar包能否正常使用
        CLibrary.INSTANCE.printf("Hello, World\n");//调用c语言dll的测试
        for (int i = 0; i < args.length; i++) {
            CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);
        }//调用c语言dll的测试

        int result=10;//函数返回值为0,故初值设个不为0的数用来测试
        int result2=10;//函数返回值为0,故初值设个不为0的数用来测试
        result= ELibrary.INSTANCE.EventPrivateChat("12",1,"eqw","昵称","test",0,0);//调用易语言dll函数测试
        result2= ELibrary.INSTANCE.EventGroupChat("1",1,"eqw","昵称","test","1","msg","",1,0);//调用易语言dll函数测试
       System.out.println(result);
       System.out.println(result2);
    }
}

注意

  • 1.System.out.println(Platform.isWindows());
    用处:测试jar包能否正常使用
  • 2.加载易语言的dll需要用32位的jdk8
  • 3.dll放src文件内

易语言破解版编译问题 https://www.cnblogs.com/ECJTUACM-873284962/p/9245115.html