Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Java程序的入口点更改为C签名?_Java_C++_C_Jna_Entry Point - Fatal编程技术网

如何将Java程序的入口点更改为C签名?

如何将Java程序的入口点更改为C签名?,java,c++,c,jna,entry-point,Java,C++,C,Jna,Entry Point,我和JNA混在一起,试图在Java程序中执行一些C代码。这是我在网上找到的一个工作示例(构建路径中需要JNA): 2.)Java程序应该能够设置给定的输出参数。 3.)程序应编译为DLL 在C++中,这个问题将得到解决: #include "stdafx.h" extern "C" { __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function)

我和JNA混在一起,试图在Java程序中执行一些C代码。这是我在网上找到的一个工作示例(构建路径中需要JNA):

2.)Java程序应该能够设置给定的
输出
参数。
3.)程序应编译为DLL

在C++中,这个问题将得到解决:

#include "stdafx.h"

extern "C" {
    __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function);
}

void __stdcall RVExtension(char *output, int outputSize, const char *function) {
    strncpy_s(output, outputSize, "IT WORKS!", _TRUNCATE);
}
所以问题是,这在Java中可能吗?如果是这样,我很高兴看到一些代码示例,因为我在这里进入了很多新领域。我甚至不知道JNA是否是一个合适的解决方案。如果有人有其他想法,请告诉我

亲切的问候,

jaySon

您必须编写一个常规的C DLL,并使用在进程内创建Java VM,然后从中调用Java程序。这样你就可以使用任何你想要的入口点。JNA在这里没有帮助。

好吧,我将尝试clearify:我想将Java程序的入口点更改为上述给定的C签名,并想从该Java程序中创建一个DLL文件。也许您将cpp程序作为入口点的想法是对的,但这是一种完全不同的方法,我也需要帮助。AFAIK无论如何不能将Java本机编译为DLL。所以我不知道你为什么认为你目前的方法会奏效,但就像女佣一样;我不做窗户。祝你好运@ElliottFrisch,我已经读过了,虽然我还没有尝试过,但我相信这种可能性。这个工具是研究级的,它可以编译成.NET DLL。除非你有某种超级特殊的Java设置,否则不会工作。Java不会“编译”成传统的程序。
void __stdcall RVExtension(char *output, int outputSize, const char *function);
#include "stdafx.h"

extern "C" {
    __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function);
}

void __stdcall RVExtension(char *output, int outputSize, const char *function) {
    strncpy_s(output, outputSize, "IT WORKS!", _TRUNCATE);
}