我正在开发一个Java项目,我必须使用第三方dll(比方说abc.dll)。所以我使用JNI创建了一个本机头文件。
然后我在vs2005(典型的win32 app。)上创建了一个dll项目,并添加了由JNI创建的头文件。我为项目选择了clr旧语法支持,并添加了abc.dll作为我项目的参考。
到目前为止,一切都很好。这是问题所在。我使用abc.dll中的一些方法实现了头文件中定义的方法。 abc.dll有一个名为“abc”的类,这就是我所做的:
abc *abcObj = new abc(); abcObj->callSomeMethod();
我从解决方案中获取构建,一切正常。但是当我运行我的Java程序时,我从JVM收到错误,告诉本机代码崩溃了?!?!我调试了它,问题出在new()中。它根本无法实例化abcObj。
然后我尝试使用该abc.dll的c ++应用程序。它奏效了。
我认为JNI或托管/非托管事件一定存在问题。我对c / c ++并不是很有经验,所以我不太了解(至少我现在没时间理解)。我唯一想做的就是使用第三方dll创建一个包装器dll,并在我的java应用程序中使用包装器。
任何帮助将不胜感激。
提前致谢...
-haydar
编辑:我拥有第三方dll所需的所有dll。