gpt4 book ai didi

java - 在 Xpages 中从服务器端 javascript/java 调用 C 代码?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:50 30 4
gpt4 key购买 nike

我正在尝试从 IBM Domino 中的 Xpage 调用一些第三方 C 代码。我有一个按钮,它有一个事件处理程序,它的操作创建一个 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 阶段加载。

nnotes.dll 可以从 xpages 加载而无需任何额外设置,大概是因为它在系统路径上,但是在您的情况下,您提供了自己的 dll,我不确定是否会找到您的 dll在 loadLibrary() 阶段的 Resources - Files 部分。

如果你还没有读过 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 可以正常使用 XPage。

一旦它开始工作,我是否可以建议在常规 Java 项目中试用 JNA + 您的自定义 dll,而无需任何 Notes/Domino 参与,只是为了验证它是否独立工作?您可以设置属性 jna.library.path 以添加 dll 的自定义位置。如果您还设置了属性 jna.debug_load=true 您可以在控制台中看到 JNA 正在寻找您的 dll 的路径,默认情况下它是系统路径和一些其他与类路径有关的约定和平台。如果它找不到它,您将得到一个 UnsatisfiedLinkError,因此请继续调整库路径,直到您可以加载您的 dll。那么至少你会知道你的dll和JNA没有问题。(如果您不想进行隔离的普通 Java 应用程序测试,您甚至可以在 xpage 中动态设置这些属性。)

最后一步是调整 dll 的位置,使其加载到您的 xpages 中。尝试使用 jna.library.path,尝试标准位置,阅读 loadLibrary 方法以找出默认位置。

关于java - 在 Xpages 中从服务器端 javascript/java 调用 C 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25071697/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com