知识大全 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计时器

用JNI实现一个高精度的Java计时器  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

知识大全 VRML与JAVA在网络课件交互运用

VRML与JAVA在网络课件交互运用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  虚拟现实建模

知识大全 Flex与java交互之数据库数据读取

Flex与java交互之数据库数据读取  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前几天有网

知识大全 IO的阻塞与非阻塞、同步与异步以及Java网络IO交互方式

IO的阻塞与非阻塞、同步与异步以及Java网络IO交互方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 Delphi下利用DDE实现同Word的交互

Delphi下利用DDE实现同Word的交互  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一引

知识大全 jsp 与 javascript 中文cookie交互

   兼容性考虑使用了utf编码测试通过支持IE及Firefox  jsp写入中文Cookie<%@pagecontentType=text/;charset=utfpageEncod

交互保险社与相互保险社的比较

交互保险社与相互保险社的比较1.交互保险社与相互保险社都具有相互保险组织性质。两者都采用社员制。经营目的同为非营利性。社员之间互相提供保险。即每个社员为其他社员提供保险。每个社员同时又获得其他社员提供

知识大全 通过JAVA与串口(RS232)通信实例

通过JAVA与串口(RS232)通信实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近了解

知识大全 C#与javascript简单交互

C#与javascript简单交互  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  呼叫js  R

知识大全 WebBrowser页面与WinForm的交互

WebBrowser页面与WinForm的交互  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!话说有