在Xpages中从服务器端javascript / java调用C代码?
作者:互联网
我正在尝试从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一起使用.
一旦可行,我是否可以建议在常规Java项目中尝试JNA您的自定义dll,而无需任何Notes / Domino参与,只是为了验证它是否可以单独工作?
您可以设置属性jna.library.path来添加dll的自定义位置.如果您还设置了属性jna.debug_load = true,则可以在控制台中看到JNA正在寻找dll的路径,默认情况下是系统路径以及与classpath和platform有关的其他约定.
如果找不到它,您将收到UnsatisfiedLinkError,因此请继续处理库路径,直到可以加载dll.然后,至少您会知道dll和JNA没什么问题.
(如果您不想进行隔离的纯Java应用程序测试,甚至可以在xpage中动态设置这些属性.)
然后,最后一步是遍历dll的位置,以使其加载到您的xpages中.尝试使用jna.library.path,尝试标准位置,继续阅读loadLibrary方法以查找默认位置.
标签:c-3,java,xpages 来源: https://codeday.me/bug/20191029/1958842.html