知识大全 Java通过JNI与Delphi交互
Posted 文件
篇首语:没有比知识更好的朋友,没有比病魔更坏的敌人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java通过JNI与Delphi交互相关的知识,希望对你有一定的参考价值。
Java进阶:Java通过JNI与Delphi交互 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
前一段时间 我用java开发一个安装程序 适用于tomcat mysql构建的web环境 在开发的过程中遇到与写注册表 注册系统服务等问题用java本身很难解决 于是我想到用JNI C与delphi两者开发JNI 我是从delphi转到java上来的 我选择了delphi
用delphi开发JNI 首先从//delphi jedi 下载JNI pas 把它加入到工程中就可以开发JNI了
例如创建桌面快捷方式:
Delphi中的代码:
library myDll uses JNI windows ComObj ActiveX ShlObj SysUtils Registry; //取得桌面目录 function getDesktopPath():String; var Reg:TRegistry; DesktopPath:String; begin Reg:=TRegistry Create; try Reg RootKey:=HKEY_CURRENT_USER; Reg OpenKey( Sofare\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders False); if Reg ValueExists( Desktop ) then DesktopPath:=Reg ReadString( Desktop ); Result:= DesktopPath; finally Reg Free; end; end; //创建桌面快捷方式 procedure CreateDesktopLink(ProgramPath ProgramArg LinkName Descr IconPath: String); var AnObj: IUnknown; ShellLink: IShellLink; AFile: IPersistFile; FileName: WideString; LinkPath:String; begin LinkPath:=getDesktopPath()+ \\ +linkName; if UpperCase(ExtractFileExt(LinkPath))<> LNK then //检查扩展名是否正确 begin raise Exception Create( 快捷方式的扩展名必须是 lnk! ); end; try OleInitialize(nil);//初始化OLE库 在使用OLE函数前必须调用初始化 AnObj := CreateComObject(CLSID_ShellLink);//根据给定的ClassID生成一个对象 此处是快捷方式 ShellLink := AnObj as IShellLink;//强制转换为快捷方式接口 AFile := AnObj as IPersistFile;//强制转换为文件接口 //设置快捷方式属性 此处只设置了几个常用的属性 ShellLink SetPath(PChar(ProgramPath)); // 快捷方式的目标文件 一般为可执行文件 ShellLink SetArguments(PChar(ProgramArg));// 目标文件参数 ShellLink SetWorkingDirectory(PChar(ExtractFilePath(ProgramPath)));//目标文件的工作目录 ShellLink SetDescription(PChar(Descr));// 对目标文件的描述 ShellLink SetIconLocation(PChar(IconPath) ); FileName := LinkPath;//把文件名转换为WideString类型 AFile Save(PWChar(FileName) False);//保存快捷方式 finally OleUninitialize;//关闭OLE库 此函数必须与OleInitialize成对调用 end; end; //创建桌面快捷方式 在JNI中调用的就是这个方法 //这个过程的命名很有讲究 它以 Java 开头 用下划线将 Java 类的包名 类名和方法名连起来 这个命名方法不能有误 否则 Java 类将无法将 nativ 方法与它对应起来 同时 在 Win 平台上 此过程的调用方式只能声明为 stdcall procedure Java__wpd_JavaWindows_createDesktopLink(PEnv: PJNIEnv; Obj: JObject;ProgramPath ProgramArg LinkName Descr iconPath:JString);stdcall; var JVM:TJNIEnv; PPath:String; PArg:String; LName:String; Description:String; IPath:String; begin JVM := TJNIEnv Create(PEnv); PPath:=JVM UnicodeJStringToString(ProgramPath); PArg:=JVM UnicodeJStringToString(ProgramArg); LName:=JVM UnicodeJStringToString(LinkName); Description:=JVM UnicodeJStringToString(Descr); IPath:=JVM UnicodeJStringToString(IconPath); CreateDesktopLink(PPath PArg LName Description IPath); JVM Free; end; //向java发送一个信息 function Java__wpd_JavaWindows_sendMessage(PEnv: PJNIEnv; Obj: JObject):JObject;stdcall; var JVM:TJNIEnv; msg:JObject; m:String; begin JVM := TJNIEnv Create(PEnv); //*********如果发送的信息中包含中文字符 则要先要经过UTF Encode转码 否则在java中取得时会是乱码 m:=UTF Encode( 中国人 ); msg:=JVM StringToJString(PChar(m)); result:= msg; end; $R * res exports Java__wpd_JavaWindows_createDesktopLink Java__wpd_JavaWindows_sendMessage; end
把上面的编译生成myDll dll文件 放到java能够找到的地方
java中的代码:
cha138/Article/program/Java/hx/201311/27225相关参考
用JNI实现一个高精度的Java计时器 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
VRML与JAVA在网络课件交互运用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 虚拟现实建模
Flex与java交互之数据库数据读取 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前几天有网
知识大全 IO的阻塞与非阻塞、同步与异步以及Java网络IO交互方式
IO的阻塞与非阻塞、同步与异步以及Java网络IO交互方式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
Delphi下利用DDE实现同Word的交互 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一引
知识大全 jsp 与 javascript 中文cookie交互
兼容性考虑使用了utf编码测试通过支持IE及Firefox jsp写入中文Cookie<%@pagecontentType=text/;charset=utfpageEncod
交互保险社与相互保险社的比较1.交互保险社与相互保险社都具有相互保险组织性质。两者都采用社员制。经营目的同为非营利性。社员之间互相提供保险。即每个社员为其他社员提供保险。每个社员同时又获得其他社员提供
通过JAVA与串口(RS232)通信实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 最近了解
C#与javascript简单交互 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 呼叫js R
WebBrowser页面与WinForm的交互 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!话说有