资源描述:
《《Java如何通过JNI与delphi交互》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、前一段时间,我用java开发一个安装程序,适用于tomcatmysql构建的web环境。在开发的过程中遇到与写注册表,注册系统服务等问题用java本身很难解决,于是我想到用JNI。C与delphi两者开发JNI,我是从delphi转到java上来的,我选择了delphi。 用delphi开发JNI,首先从http://delphi-jedi.org 下载JNI.pas,把它加入到工程中就可以开发JNI了。 例如创建桌面快捷方式: Delphi中的代码: librarymyDll uses JNI,windows,ComObj,Act
2、iveX,ShlObj,SysUtils,Registry; //取得桌面目录 functiongetDesktopPath():String; var Reg:TRegistry; DesktopPath:String; begin Reg:=TRegistry.Create; try Reg.RootKey:=HKEY_CURRENT_USER; Reg.OpenKey('SoftwareMicrosoftWindowsCurrentVersionExplorerShellFolders',False); i
3、fReg.ValueExists('Desktop')thenDesktopPath:=Reg.ReadString('Desktop'); Result:=DesktopPath; finally Reg.Free; end; end; //创建桌面快捷方式 procedureCreateDesktopLink(ProgramPath,ProgramArg,LinkName,Descr,IconPath:String); var AnObj:IUnknown; ShellLink:IShellLink; AFile:IP
4、ersistFile; FileName:WideString; LinkPath:String; begin LinkPath:=getDesktopPath()+''+linkName; ifUpperCase(ExtractFileExt(LinkPath))<>'.LNK'then//检查扩展名是否正确 begin raiseException.Create('快捷方式的扩展名必须是.lnk!'); end; try OleInitialize(nil);//初始化OLE库,在使用OLE函数前必须调用初始化 An
5、Obj:=CreateComObject(CLSID_ShellLink);//根据给定的ClassID生成一个COM对象,此处是快捷方式 ShellLink:=AnObjasIShellLink;//强制转换为快捷方式接口 AFile:=AnObjasIPersistFile;//强制转换为文件接口 //设置快捷方式属性,此处只设置了几个常用的属性 ShellLink.SetPath(PChar(ProgramPath));//快捷方式的目标文件,一般为可执行文件 ShellLink.SetArguments(PChar(Progr
6、amArg));//目标文件参数 ShellLink.SetWorkingDirectory(PChar(ExtractFilePath(ProgramPath)));//目标文件的工作目录 ShellLink.SetDescription(PChar(Descr));//对目标文件的描述 ShellLink.SetIconLocation(PChar(IconPath),0); FileName:=LinkPath;//把文件名转换为WideString类型 AFile.Save(PWChar(FileName),False);//
7、保存快捷方式 finally OleUninitialize;//关闭OLE库,此函数必须与OleInitialize成对调用 end; end; //创建桌面快捷方式,在JNI中调用的就是这个方法 //这个过程的命名很有讲究,它以Java开头,用下划线将Java类的包名、类名和方法名连起来。这个命名方法不能有误,否则,Java类将无法将nativ方法与它对应起来。同时,在Win32平台上,此过程的调用方式只能声明为stdcall。 procedureJava_com_wpd_JavaWindows_createDesktopLi
8、nk(PEnv:PJNIEnv;Obj:JObject;ProgramPath,ProgramArg,LinkName,Descr,iconPath: