Java调用dll String返回类型方法

时间:2017-08-02 04:16:52

标签: java c++ dll jna

我试图通过JAVA应用程序调用DLL文件中的函数。 我找到了这个来源http://blog.mwrobel.eu/how-to-call-dll-methods-from-java/,一切都像魅力一样。

但是,我希望对DLL文件进行一些修改,我希望函数从源代码返回String而不是char。

这是我的java代码。

public class Main {
   public interface simpleDLL extends Library {
     simpleDLL INSTANCE = (simpleDLL) Native.loadLibrary("simpleDLL", simpleDLL.class);
     int giveIntGetInt(int a);               // int giveIntGetInt(int a);
}

public static void main(String[] args) {

    simpleDLL sdll = simpleDLL.INSTANCE;

    String result = sdll.giveCharGetChar("abc");
    System.out.println("result: " + result);

    int a = 3;
    int result1 = sdll.giveIntGetInt(a);  // calling function with int parameter&result
    System.out.println("giveIntGetInt("+a+"): " + result1);
    }
}

这是我的C ++代码。

#include "simpleDLL.h"
#include <string>
#include <stdexcept>

using namespace std;
using std::string;


namespace simpleDLLNS
{
    string simpleDLL::giveCharGetChar(string a)
{
    return "abc";
}

int simpleDLL::giveIntGetInt(int a)
{
    return 3*a;
}

void simpleDLL::simpleCall(void)
{
    int x = 3;
    return;
}

int simpleDLL::giveVoidPtrGetInt(void* param)
{
    if(param!=0)
    {
        int* x = (int*)param;
        return *x;

    }
    else
    {
        return -1;
    }
 }
}

除此之外,如果我将我的String更改为char,它会返回我的韩语单词。如果我使用String,Java将会出错。请帮忙。

1 个答案:

答案 0 :(得分:0)

请参阅此示例,了解如何将字符串发送到C库并使用Java中的JNA从C库接收字符串:

http://www.eshayne.com/jnaex/index.html?example=2