未能加载文件或程序集“ RevitAPIUI.dll”

revit三回开发中遇见的标题

配备MinGW的环境变量:

  1. 开辟环境变量(系统变量),添加 MINGW_HOME
    变量,变量值是刚才MinGW的装置地方,如 D:\Program Files\MinGW
  2. 设置path变量,编辑path变量添加
    %MINGW_HOME%\bin;%MINGW_HOME%\msys\1.0\bin;
  3. 添加 LIBRARY_PATH 变量,变量值 %MINGW_HOME%\lib
  4. 添加 C_INCLUDE_PATH 变量,变量值
    %JAVA_HOME%\include;%JAVA_HOME%\include\win32;%MINGW_HOME%\include
  5. 添加 CPLUS_INCLUDE_PATH 变量,内容
    %JAVA_HOME%\include;%JAVA_HOME%\include\win32;%MINGW_HOME%\lib\gcc\mingw32\4.5.2\include\c++
  6. Win柒点击分明后登时生效,若未奏效请重启系统(参考安装JDK时计划操作)

第6、五步额外添加的%JAVA_HOME%\include;%JAVA_HOME%\include\win3二;是为了让eclipse在c/c++项目中自行引进这么些目录下的各样头文件,例如 jni.h,也可在具体品种的质量中以下职责举办点名:

 图片 1

 

 1 public class HelloJNI { 2  3     public static void main(String[] args) { 4         JNIIterface hw = new JNIIterface(); 5         int t = hw.add(3, 7); 6         int s = hw.MyMethod(); 7         System.out.println; 8         System.out.println; 9     }10 }

整套系统运转只花了100叁ms。运营速度增进了二倍!

RevitAPIUI.dll 只好 Native Library 中推行; 脱离了Native Library,API是跑不起来的

简言之准备干活:

以下具体操作方法能够一贯百度,答案大约是唯1可靠的。

  1. 安装JDK,配置连串环境变量
  2. 准备好2个带CDT插件的Eclipse,笔主使用的是google的ADT
    Bundle,自带了CDT,对应Eclipse 叁.八.0版
  3. 下载二个MinGW(免费的C/C++等语言编译器套件),笔主限于集团垃圾互联网,测试时选择mingw-offline-install-二〇一三04二陆v四.6.二版,安装时仅需勾选(在线安装版下载数据量约50Mb):
  • C Compiler
  • C++ Compiler
  • MinGW Developer Toolkit (Indudes MSYS Basic System)

 

    在工程目录下的bin目录下执行命令:javah -classpath . -jni
base.JNIIterface

跟汤姆cat相关的project,除了connector外,还有其余三个叫Tomcat
native,汤姆cat
native在具体的运转平台上,提供了壹种优化技术,它自己是基于ARAV肆P(Apache
Portable Runtime)技术。相当于说,我们使用了汤姆cat
native技术今后,汤姆cat在跟操作系统级其余并行方面能够做得越来越好,并且它更像apache3个,能够越来越好地作为一台web
server。

 

调用JNI全过程:

创立三个1般java工程 Test,添加1个特别负责引进调用本地库的类 Native,代码如下:

图片 2

1 public class Native {
2     // 声明自定义本地库方法接口
3     native public static void run();
4     
5     // 自动加载本地库文件,如文件名全称为 myCLib.dll
6     static{
7         System.loadLibrary("myCLib");
8     }
9 }

图片 3

 

打开CMD….可以吗,笔主承认标题党了,整个博文仅此①处索要一句简单的下令!
CMD导航至项目文件夹下的 src 目录,输入 javah
test.Native
(供给利用包名.类名的总体限定名称),生开销地点法接口头文件 test_Native.h

图片 4

 

刷新eclipse的 Package Explorer
应该会成为那样的目录状态,在那之中刚才刚才生成的 test_Native.h 文件代码如下图示(笔主抢闸创设了Test类,稍候用于调用Native类的本地点法):

图片 5

 

 

创设八个新的 C 工程 MyC,期待编写翻译成dll的时候,选取 Shared
Library
 下的模版:

图片 6

图片 7

 

 在 MyC 工程内创设一个文书夹 src ,并将刚才 Test 项目中变化的 test_Native.h 头文件拷贝(或分开)到 MyC 工程的 src 文件夹下,Test 工程下的 test_Native.h 文本在末端的连串运营进程中校不再起其它功效,可删:

图片 8

 

*  打开 MyC 工程下的 test_Native.h ,若 #include
<jni.h>
 提示 Unresolved inclusion:
<jni.h>
 的一无所能警告(如下图所示),则表消痈前那么些C项目没有点名 jni.h 的头文件地方,参考上文 陈设MinGW的环境变量 的第四、五步实行配备:

图片 9

 

 **  MyC 工程文件中接口函数代码上提示的 Syntax
error 
能够一时忽略,据闻是eclipse语法检查测试的2个bug:

 图片 10

 

 在 MyC 工程 src 文本夹中,新建2个C的贯彻类 NativeC.c ,引进接口头文件 jni.htest_Native.h ,并编辑接口函数 JNICALL
Java_test_Native_run
 的落到实处(函数接口直接从 test_Native.h 中总体拷贝过来,注意加上形参):

图片 11

1 #include <jni.h>
2 #include "test_Native.h"
3 #include <stdio.h>
4 
5 JNIEXPORT void JNICALL Java_test_Native_run
6   (JNIEnv *env, jclass clazz){
7     puts("Hello JAVA, I am C.");
8 }

图片 12

 

这儿工程看起来应当是那样子的:

图片 13 

 

 

由于使用 minGW 暗许生成的 dll 函数签名带有 @
分隔符,将招致前面JNI调用时发生 java.lang.UnsatisfiedLinkError:
xoxoclass.xoxomethod() 错误,由此须求执行以下步骤解决多余的 @ 符号。

配置 MyC 工程: MyC 工程上右键菜单 Properties ,左边采用C/C++ Build -> Settings ,左侧 Configuration
中展现的为日前正在展现的编写翻译模板,[ Active ] 表示通过
Project->Build Project 菜单编译时选择的暗中同意编写翻译版本, minGW
将基于那一个模板的性质设置,编写翻译生成多套版本的 dll 或 exe
,有洁癖的校友可经过最左边的 Manage Configurations… 按钮增加和删除编写翻译模板:

图片 14

 

为了相比效果,笔主决定追加一套新模板 ReleaseNoAt ,继承暗中同意的
Release 模板属性参数,并设置为Active,决不是因为洁癖或什么意外的来头:

图片 15  图片 16

 

OK重返刚才的编写翻译模板属性配置界面,在 ReleaseNoAt 模板下,Tool
Settins 页中的 MinGW C Linker -> Miscellaneous ,Linker flags
框中输入 -Wl,–kill-at,点击最下方的 Apply:

图片 17

 

点击 MinGW C Linker ,显示的参数结果应当是那样的:

图片 18

 

要是在此之前建立的C工程不是接纳 Shared
Library
 模板,并且私下认可编写翻译出的不是 dll 文件,能够在此选用 Build
Artifact
 页举行修改配置,Artifact Type 中采取 Shared
Library 
,Artifact extension 中选择 dll 即可,Output prefix
可钦赐输出 dll 文件的命名前缀:

图片 19

 

OK鲜明再次回到代码编辑界面,在 MyC 工程上右键菜单,Build
Configurations->Build All,生成全部模板的dll文件版本:

图片 20

 

各版本 dll 如下图所示,控制斯科学普及里能够阅览各个 dll
生成所用的命令参数(未来体现的是 ReleaseNoAt 本子,即唯1配置了去掉@符号的模版):

图片 21

 

为了验证暗中认可 Release 与 ReleaseNoAt 版本的区分,可用 dllexp 这几个工具打开这四个dll 文件进行查看(具体方法不告诉你):

Release版(上面这么些 @8 正是全体劳动的元凶祸首)

图片 22

 

ReleaseNoAt版(干净了)

图片 23

 

回到eclipse,在 Test 工程中新建文件夹 dll (命名随意),并将方素不相识成的 ReleaseNoAt版 libMyC.dll 拷贝到这几个dll文件夹中,重命名叫 myCLib.dll(因为上文 Native类 中通过
System.loadLibrary(“myCLib“);
加载了那个名字的dll文件,当然你也足以修改代码变成
System.loadLibrary(“libMyC“);
来取代重命名),此后 MyC 工程将不再起其它成效,可删:

图片 24

 

配置 Test工程 属性,钦赐工程的地面库目录,直接看图:

图片 25

 

Test工程 test包中新建 Test类 (由于时间关系,笔主已经先期偷偷违反规制的建筑了),在main方法中引用 Native类 的当地点法run():

1 public class Test {
2 
3     public static void main(String[] args) {
4         Native.run();
5     }
6 }

图片 26

 

说起底一步,运维起来…好啊,下面已经偷跑了,最后结出如上航海用教室所示,Hello, I
am Wavky.

    上边创造的JNIIterface类,JNIIterface
.class文件的门道:\JNIDemo\bin\base\JNIIterface .class

以下是汤姆cat的运行截图:

图片 27

    创立效率实现公文

假使大家是Wn32/Wind6四的操作系统,大家能够下载tcnative-壹-ipv肆.dll或tcnative-1-ipv陆.dll,并把那么些文件放在%汤姆cat_HOME%/bin目录下就能够了,这样Tomcat会有更加好的performance。

检查程序流程:登录,配置,运转revit。

        图片 28

Tomcat在Linux上使用Native
Library
 
http://www.linuxidc.com/Linux/2014-10/108600.htm

末尾发现万分捕获, 
MessageShow.Show(e);封闭的方法引用的RevitAPIUI中的内容。

      第三部:

咱俩必要接纳相应的操作系统,对于windows操作系统相比便利,直接下载dll文件,然后丢到汤姆cat的bin即可,而对此Linux,大家还索要遵照document举行配备跟编辑才能应用。

在起步revit此前不可能执行RevitAPI.dll和RevitAPIUI.dll的有关措施,

上边就是记录了应用JNI的最基本步骤。

试了须臾间汤姆cat的起步,未有应用Tomcat
native技术进行运转,系统运营须要3秒多。而将汤姆cat
native放到bin目录之后,运行快速,壹秒种解决!神啊。

删去或撤换方法消除难点。

      图片 29

图片 30

      图片 31

图片 32

  伍. 将dll文件配置到java工程

汤姆cat Native 那一个类型方可让 汤姆cat 使用 Apache 的 apr
包来拍卖包罗文件和互连网IO操作,以升级品质。

  4.生成dll文件

发表评论

电子邮件地址不会被公开。 必填项已用*标注