System.load 和 System.loadLibrary详解
1.它们都可以用来装载库文件,不论是JNI库文件还是非JNI库文件。在任何本地方法被调用之前必须先用这个两个方法之一把相应的JNI库文件装载。
2.System.load 参数为库文件的绝对路径,可以是任意路径。
例如你可以这样载入一个windows平台下JNI库文件:
System.load("C:\\Documents and Settings\\TestJNI.dll");。
3. System.loadLibrary 参数为库文件名,不包含库文件的扩展名。
例如你可以这样载入一个windows平台下JNI库文件
System. loadLibrary ("TestJNI");
这里,TestJNI.dll 必须是在java.library.path这一jvm变量所指向的路径中。
可以通过如下方法来获得该变量的值:
System.getProperty("java.library.path");
默认情况下,在Windows平台下,该值包含如下位置:
1)和jre相关的一些目录
2)程序当前目录
3)Windows目录
4)系统目录(system32)
5)系统环境变量path指定目录
4.如果你要载入的库文件静态链接到其它动态链接库,例如TestJNI.dll 静态链接到dependency.dll, 那么你必须注意:
1)如果你选择
System.load("C:\\Documents and Settings\\ TestJNI.dll");
那么即使你把dependency.dll同样放在C:\\Documents and Settings\\下,load还是会因为找不到依赖的dll而失败。因为jvm在载入TestJNI.dll会先去载入TestJNI.dll所依赖的库文件dependency.dll,而dependency.dll并不位于java.library.path所指定的目录下,所以jvm找不到dependency.dll。
你有两个方法解决这个问题:一是把C:\\Documents and Settings\\加入到java.library.path的路径中,例如加入到系统的path中。二是先调用
System.load("C:\\Documents and Settings\\ dependency.dll"); 让jvm先载入dependency.dll,然后再调用System.load("C:\\Documents and Settings\\ TestJNI.dll");
2)如果你选择
System. loadLibrary ("TestJNI");
那么你只要把dependency.dll放在任何java.library.path包含的路径中即可,当然也包括和TestJNI.dll相同的目录。
分享到:
相关推荐
以下是对System.load与System.loadLibrary进行了详细的分析介绍。需要的朋友可以过来参考下
t532.rar 测试代码 https://blog.csdn.net/wowocpp/article/details/105382257 python 调用 C++ dll 32位 64位 问题 ctypes.cdll.LoadLibrary
api-ms-win-core-libraryloader-l1-2-0.dll文件是Windows操作系统的核心动态链接库之一,它提供了与加载和卸载动态链接库(DLL)相关的函数和功能。 该DLL文件包含了一些与库加载和管理相关的函数,例如LoadLibrary...
但C++ kernel32.dll LoadLibrary只能加载指定路径非托管DLL..有了kernel.dll现在好了.可以像C#一样轻松从内存或资源里加载非托管DLL.. 从指定文件byte[]内存数组加载非托管DLL API 此DLL接口 FARPROC ...
也可以在MinGW上直接调用 pexports mylib.dll > mylib.def (这就是MinGW的方便之处了) 2. 生成lib 需要mylib.dll和mylib.def lib /machine:ix86 /def:mylib.def 这样就会生成mylib.lib和mylib.exp两个文件。(mylib....
若找不到jacob.dll,会报如下错误 Exception in thread "main" java.lang.UnsatisfiedLinkError: no jacob-1.17-x86 in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738) at java...
本文将介绍三种方法: 1、Windows 钩子 2、CreateRemoteThread 和 LoadLibrary 技术 ——进程间通信 3、CreateRemoteThread 和WriteProcessMemory 技术 ——如何用该技术子类化远程控件 ——何时使用该技术
示范如何使用 LoadLibrary(...) 和 GetProcAddress(....)调用dll的输出函数.
普通版的9个函数: //打开通达信 //关闭通达信 //登录帐号 //注销 //查询各类交易数据 //下单 //撤单 //获取五档报价 //融资融券账户直接还款
丢失mfc140u.dll,方便下载,之前下载时候下来一堆捆绑软件
Oracle官方客户端最新版本,windows系统64位的。
LoadLibraryFuncDLL:外部LoadLibrary注入DLL-用于将C#GUI与C ++连接
(注:如果是动态加载,需手工调用 ::LoadLibrary()/::FreeLibrary() 系列 API 函数加载和卸载 Logger DLL) [ ***** 对于希望通过窗口接收日志信息的 GUI 程序 ***** A. 日志组件初始化成功后调用 ...
xDll工程只是一个测试用的dll,附上代码,编译出的xDll.dll直接放在testLoadDll工程目录下 testLoadDll是实际测试代码,从资源直接加载Dll并调用其导出函数 加载用MemoryLoadLibrary() 查找导出函数用...
/* 网上和CVI的例程很少,一般为调用LIB实例,但很多dll都是以*.dll提供的,故本例程很实用。 */ /* 本例程主要是调用了三个Windows API函数LoadLibrary(),GetProcAddress(),FreeLibrary() */ /* 菜农HotPower@126....
C语言程序设计期末实训作业,选择题目是做一个**图书信息管理系统**。 这里给出源码,需要实训报告等,请前往文章中github地址下载 2020年3月30日 22:20:19再次修改为免费下载
公司服务器使用的是Windows Server 2012,在上面装Opencv后,使用java代码 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 总是提示opencv_java410.dll: Can't find dependent libraries,搜索N多资源无解,最终...
DLLhwnd = LoadLibrary("lpk.dll") '加载DLL DLLFunDre = GetProcAddress(DLLhwnd, "LpkDrawTextEx") '获取回调函数地址 LpkHooksInfo.lpHookProc_LpkTabbedTextOut = 0 LpkHooksInfo.lpHookProc_LpkPSMTextOut = 0...
公司服务器使用的是Windows Server 2008,在上面装Opencv后,使用java代码 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 总是提示opencv_java410.dll: Can't find dependent libraries,搜索N多资源无解,最终...
直接在内存中加载dll , 自己用PE实现 LoadLibrary