集成Windows本地应用到Eclipse RCP程序中

Windows 应用程序非常丰富,而有时我们的 Eclipse RCP 程序所需要的一些功能已经有一些现有的 Windows 本地应用程序的实现,我们希望能够在我们的 RCP 程序中重用这些功能。一种最简单的重用方法就是直接在我们 RCP 窗口中嵌入本地应用程序窗口。要使得一个 Windows 本地应用程序能够在我们的 RCP 程序中运行,我们可以使用 Windows 提供的 reparent 机制。利用这种机制实现窗口嵌入的主要过程是:首先要在我们的程序中启动要嵌入的 Windows 程序,然后我们设法获取程序启动后的主窗口句柄,再将我们RCP程序的窗口设置成 Windows 程序主窗口的父窗口。

由于我们需要启动 Windows 本地程序并且获取它的主窗口句柄,这些只能使用 Windows 本地调用来实现,所以我们先用 Windows 本地调用实现相应的功能,然后我们再用 JNI 进行调用。

JNI 简介

JNI 的全称是 Java Native Interface,JNI 标准是 Java 平台的一部分,它用来将 Java 代码和其他语言写的代码进行交互。下面简单介绍一下使用 JNI 的步骤:

编写带有 native 声明的 java 方法

这里以 HelloWorld 为例:

清单 1. Hello World Java 代码

public class HelloWorld {
  static {
  System.loadLibrary(“helloworld”)}
  }

  public native void print()}

  public static void main(String[] args) {
  HelloWorld hello = new HelloWorld()}
  hello.print()}
  }
}

编译 Java 代码以及生成 c/c++ 头文件:

先编译这个 java 类: javac HelloWorld.java,然后再生成扩展名为 .h 的头文件,java 提供了命令 javah 来生成头文件:javah –jni HelloWorld,下面的清单显示了生成的头文件的内容:

清单 2. Hello World C++ 头文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>}
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
  * Class:   HelloWorld
  * Method:  print
  * Signature: ()V
  */
JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *, jobject)}

#ifdef __cplusplus
}
#endif
#endif

时间: 2024-10-27 21:40:22

集成Windows本地应用到Eclipse RCP程序中的相关文章

eclipse rcp 代码中获取action对象

问题描述 eclipse rcp 代码中获取action对象 请问有没有什么办法可以在Activator中获取extensions中添加的工具栏或者菜单栏按钮对象,这样可以在代码中控制每一个action对应图标的样式,以及各action的可用和不可用状态.

Eclipse客户端程序中多线程的使用

简介:本文分析了Eclipse中多线程程序的实现,讨论了在Eclipse客户端程序开发中应用多线程的方 法和要注意的问题,同时也讨论了多线程程序的一些调试和问题解决的方法. Eclipse作为一个开发平台,使用越来越广泛,基于Eclipse Rich Client Platform开发的客户端程序 也越来越多.在当今越来越复杂的应用环境中,我们的客户端程序不可避免的要同时进行多任务的处理. 一个优异的客户端程序都会允许用户同时启动多个任务,从而大大提高用户的工作效率以及用户体验.本 文中我们来谈

在rcp程序中如何实现类似于eclipse中的Debug透视图下的Debug视图工具栏中的单步,跳过执行等按钮的快捷键

问题描述 大致如题所说,我有一个视图工具栏中也有类似debug视图的执行停止按钮,但是我目前只能在选中当前视图下,按F7或F8等快捷键有用,如果鼠标在其它视图中,就不知道该怎么搞了

Eclipse RCP插件开发中引用打包在插件目录下的图片资源

利用Eclipse插件技术开发的RCP,如果你使用相对主目录/绝对路径的方式来 访问图片等文件资源,在Eclipse环境下运行是没有问题的,但是在你导成插件 plugins时,它们全部导成了一个jar文件,这时原来可以正确运行的代码就会出 问题. 解决这个问题很简单,用Eclipse提供的 org.eclipse.ui.plugin.AbstractUIPlugin类的imageDescriptorFromPlugin方 法,示例代码如下: String imagePath = "icons/l

《windows核心编程》 在应用程序中使用虚拟内存

  Microsoft Windows 提供了以下三种机制来对内存进行操控: 虚拟内存 最适合用来管理大型对象数组或大型结构数组 内存映射文件 最适合用来管理大型数据流(通常是文件),以及在同一台机器上运行多个进程之间共享数据 堆 最适合管理大量小型对象   本篇只讨论第一种方式 虚拟内存. 15.1 预订地址空间区域 可以使用VirtualAlloc函数来预订进程中的地址空间区域 LPVOID WINAPI VirtualAlloc( __in_opt LPVOID lpAddress, __

Eclipse RCP插件开发中经常调用的几个方法

1.重启RCP应用 PlatformUI.getWorkbench().restart(); 2.在插件资源库中查找Perspective(其它extend point资源的获得类似) IPerspectiveDescriptoripd=PlatformUI.getWorkbench ().getPerspectiveRegistry().findPerspectiveWithId (FavoritePerspective.ID); //根据plugin.xml中的ID查找 3.获得当前RCP应

Eclipse RCP中使用JasperReport制作报表

Eclipse RCP用来开发Java客户端应用非常爽,现在它本身也有BIRT报表项目 支持Eclipse RCP中使用报表.不过四年前我开始开发时,却没这么幸运,于是怎 么在RCP中生成报表成我一个头痛的事情. 琢磨了几天,终于让我想出一个在我的Eclipse RCP程序中使用JasperReport 报表的方法: 1.报表模版存放在服务端特定的一个资源目录下. 2.客户端获得客户输入的报表参数(查询范围.分组条件)及对应报表模版 名称(与服务端有命名约定) 3.客户端提交request对象至

在eclipse rcp中使用spring框架

很久就想了如何在Rcp程序中使用Spring.让Spring容器来管理我们rcp程序中的Beans.看到web项目中使用了spring后带来的好处(最直接的就是看到代码量少了)就一脸的憧憬.想我的好日子什么时候才会来啊. 有这个憧憬后我就开始考虑改如何做了.大家肯定都知道如果在eclipse rcp程序中使用直接使用spring的beanfactory无论你是使用方式都会说找不到配置文件的.这个其中的原因是Eclipse 的每个插件都使用他们自己的类加载器(class load) 说明:ecli

使用Eclipse RCP进行桌面程序开发(三):视图和透视图

Eclipse RCP开发中,和用户进行交互最多的界面,应该是视图了,而透视图就是将已有 的视图.菜单.工具栏.编辑器等等进行组合和布局.看完这一节,我们就可以建立如下图 这样的程序界面了. 首先我们来介绍一下视图,建立一个视图其实非常简单,只要从 org.eclipse.ui.part.ViewPart继承一个类,然后在plugin.xml中进行视图的配置.其中, 向视图中添加控件的操作,我们即可以手工编写,也可以使用Designer插件,我这里推荐大 家使用Designer插件,该插件对RC