jna native.loadlibrary win7 需要什么支持dll

jna native.loadlibrary win7 需要什么支持dll,第1张

0 JNA安装

0.1 JNA是什么

JNA(JavaNativeAccess)框架是一个开源的Java框架,是SUN公司主导开发的,建立在

经典的JNI的基础之上的一个框架。

JNA项目地址:https://jna.dev.java.net/

JNA使Java调用原生函数就像.NET上的P/Invoke一样方便、快捷。

JNA的功能和P/Invoke类似,但编写方法与P/Invoke截然不同迅裤激。JNA没有使用Annotation,

而是通过编写一般的Java代码来实现。

P/Invoke是.NET平台的机制。而JNA是Java平台上的一个开源类库,和其他类库没有

什么区别。只需要在classpath下加入jna.jar包,就可以使用JNA。

JNA使Java平台可以方便地调用原生函数,这大大扩展了Java平台的整合能力。

0.2 加入

在eclipse 中将文章最后的JNA下载中的zip解压放到一个记得住的文件夹然后在工程的JAVA Build Path中加入这两个jar即可

1 使用步纯庆骤

1.1 编写DLL

这里我们使用 code::blocks编写dll

首先新建一个DLL工程

建立完毕后我们可以看到这样的结构

其中有一个h文件和一个cpp文件

依葫亩袜芦画瓢 改写这两个文件就可以了,我们写两个函数,一个加一个阶乘

main.h 改写成

[cpp] view plain copy

#ifndef __MAIN_H__

#define __MAIN_H__

#include <windows.h>

/* To use this exported function of dll, include this header

* in your project.

*/

#ifdef BUILD_DLL

#define DLL_EXPORT __declspec(dllexport)

#else

#define DLL_EXPORT __declspec(dllimport)

#endif

#ifdef __cplusplus

extern "C"

{

#endif

int add(int a,int b)

int factorial(int n)

#ifdef __cplusplus

}

#endif

#endif // __MAIN_H__

main.cpp改写成

[cpp] view plain copy

#include "main.h"

int add(int a,int b){

return a + b

}

int factorial(int n){

int i

int r = 1

for(i=1i<n+1i++)

r = r*i

return r

}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)

{

switch (fdwReason)

{

case DLL_PROCESS_ATTACH:

// attach to process

// return FALSE to fail DLL load

break

case DLL_PROCESS_DETACH:

// detach from process

break

case DLL_THREAD_ATTACH:

// attach to thread

break

case DLL_THREAD_DETACH:

// detach from thread

break

}

return TRUE// succesful

}

其中DLLMain是动态链接库的入口函数我们不用管它,点击编译按钮

这样就生成了DLL文件了,我们在项目文件夹 bin文件夹下的Debug中可以找到编译成了DLL文件,将这个文件拷贝到需要使用DLL的JAVA工程路径下

一、ImageMagick介绍

ImageMagick是用C语言开发图片处理程序。可以对图片进行改变大小、旋转、锐化、减色或增加特效等 *** 作虚世。对图片的 *** 作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来亏誉闷完成。

ImageMagick 的官网是:http:// www.imagemagick.org/script/index.php

由于我们是java项目,直接使用java通过JNI技术调用ImageMagick是不行的。因为ImageMagick开发时没有使用java JNI生成的头文件。

可以使用jmagick解决,jmagick是由c语言开发的,开发时使用了java JNI生成的头文件,所以java可以通过JNI技术调用jmagick。jmagick再调用ImageMagick。这们我们处理图片使用的是jmagick暴露的java接口。

也可以使用JNA来调用ImageMagick,JNA全称是Java Native Access,JNA是在JNI的基础上完善的,方便的我们开发的。JNA项目主页是https://github.com/twall/jna。使用JNA来销弯调用ImageMagick就须要直接 *** 作ImageMagick提供的C接口(API)。

二、在Linux上用源码安装ImageMagick与jmagick

我们使用jmagick,在ImageMagick官网首页左侧菜单的Program Interfaces菜单中找到jmagick。进入jmagick的主页。

我们使用6.4版本,下载地下是:

http:// d ownloads.jmagick.org/6.4.0/

我们下载:

ImageMagick-6.4.0-0.tar.gz

jmagick-6.4.0-src.tar.gz

文档在:

http:// downloads.jmagick.org/jmagick-doc/

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

解压ImageMagick,查看ImageMagick的安装说明文件Install-unix.txt就知道怎么安装ImageMagick了。

解压jmagick,查看jmagick的安装说明文件INSTALL就知道怎么安装jmagick了。

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

安装ImageMagick

修改文件执行权限:chmod -R 755 文件名

tar zvxf ImageMagick-6.4.0-0.tar.gz

cd ImageMagick-6.4.0-0

./configure --prefix=/opt360/ImageMagick-6.4.0 --with-quantum-depth=8

make

make install

--卸载:make uninstall

关于Q8,Q16,Q32的说明:

Q8表示: 8-bits per pixel quantum

Q16表示:16-bits per pixel quantum

在 Install-unix.txt文件中的解释说明,避免翻译的不好误导大家,请大家自己去看原文吧。大意是:大多数电脑显示使用8-bit per pixel quantums。使用16-bit per pixel quantums在处理图片时比8-bit慢15%至50%,并须要更多的内存。

处理一张1024x768像素的图片8-bit要使用3M内存,16-bit要使用8M内存。

8-bit可表示0-255种值,16-bit可表示0-65535种值。

默认值是8-bit.

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

安装jmagick

修改文件执行权限:chmod -R 755 文件名

tar zvxf jmagick-6.4.0-src.tar.gz

cd jmagick-6.4.0-src

./configure --prefix=/opt360/jmagick-6.4.0 --with-java-home=/home/jdk/jdk1.6.0_12 -with-magick-home=/opt360/ImageMagick-6.4.0

make all

make install

下面几步测试可以不执行

make simpletest 因没有Junit的jar包报2个错误,不用管。

make test

make javadoc

安装成功后,在/opt360/jmagick-6.4.0/lib/有一个jmagick-6.4.0.jar文件,在你的java项目中就使用这个jar文件处理图片。

记住jmagick-6.4.0.jar是使用前面你指定的jdk1.6编译出来的,所以不能在jdk为1.5的环境下使用jmagick-6.4.0.jar。

如果你执行了make javadoc,在/opt360/jmagick-6.4.0/share/doc目录下就有文档。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12551856.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存