我正在尝试从IBM Domino中的Xpage调用一些第三方C代码。我有一个带有eventHandler的按钮,该按钮的动作创建一个Java对象,然后尝试执行一个方法,该方法只是尝试在DLL中加载并运行一个简单的测试C函数(通过JNA)。(它在Windows 7下运行。)这是Java代码:
interface CLibrary extends StdCallLibrary {
int hello();
}
public class MyHelloWorld {
public void testImage() {
CLibrary INSTANCE2 = (CLibrary) Native.loadLibrary("helloWorld", CLibrary.class);
INSTANCE2.hello();
这是C代码:
#include <stdio.h>
int
hello()
{
printf ("Hello World!\n");
}
我已将C代码编译为dll,并且已将.dll作为Designer中的Resources-> Files导入。我还将jna.jar文件放在服务器上的ext目录中。当我尝试运行所有这些时,出现500错误。这里发生了很多事情,所以我不确定是什么问题。日志文件显示得很少。有人做过吗?总而言之,我希望能够从XPage-> Java-> C进入。谢谢!
巧合的是,我昨晚刚刚使用Xpages,JNA和nnotes.dll进行了此操作。
我怀疑您的库没有在loadLibrary阶段加载。
可以从xpages加载nnotes.dll,而无需进行任何额外的设置,大概是因为它在系统路径上,但是,在您的情况下,您将提供自己的dll,但我不确定是否可以在参考资料中找到您的dll。 -在loadLibrary()阶段的“文件”部分。
如果您尚未阅读Jesper Kiaer的这篇文章,请访问http://nevermind.dk/nevermind/blog.nsf/subject/calling-the-domino-c-api-from-an-xpage-or-a-java-agent阅读该文章,然后尝试他的NSFDbSpaceUsage示例,但可以在XPage中进行。(他在Java代理中执行此操作,而只是在xpage中执行)。这样,您知道JNA将与XPages一起使用。
一旦可行,那么我可以建议在没有任何Notes / Domino参与的情况下,在常规Java项目中尝试JNA +您的自定义dll,只是为了验证它是否可以单独工作吗?您可以设置属性jna.library.path
以添加dll的自定义位置。如果还设置该属性jna.debug_load=true
,则可以在控制台中看到JNA正在寻找dll的路径,默认情况下是系统路径以及与classpath和platform有关的其他约定。如果找不到它,则会收到UnsatisfiedLinkError,因此请继续处理库路径,直到可以加载dll。然后,至少您会知道dll和JNA没什么问题。(如果您不想进行独立的纯Java应用程序测试,甚至可以在xpage中动态设置这些属性。)
然后,最后一步是遍历dll的位置,以使其加载到您的xpages中。尝试使用jna.library.path,尝试标准位置,继续阅读loadLibrary方法以查找默认位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句