java dll 调用方法_如何在Java程序中的DLL中调用方法

source:

package jnahelloworldtest;

import com.sun.jna.Library;

import com.sun.jna.Native;

import com.sun.jna.NativeLong;

import com.sun.jna.Platform;

import com.sun.jna.*;

/** Simple example of native library declaration and usage. */

public class Main {

public interface simpleDLL extends Library {

simpleDLL INSTANCE = (simpleDLL) Native.loadLibrary(

(Platform.isWindows() ? "simpleDLL" : "simpleDLLLinuxPort"), simpleDLL.class);

// it's possible to check the platform on which program runs, for example purposes we assume that there's a linux port of the library (it's not attached to the downloadable project)

byte giveVoidPtrGetChar(Pointer param); // char giveVoidPtrGetChar(void* param);

int giveVoidPtrGetInt(Pointer param); //int giveVoidPtrGetInt(void* param);

int giveIntGetInt(int a); // int giveIntGetInt(int a);

void simpleCall(); // void simpleCall();

}

public static void main(String[] args) {

simpleDLL sdll = simpleDLL.INSTANCE;

sdll.simpleCall(); // call of void function

int a = 3;

int result1 = sdll.giveIntGetInt(a); // calling function with int parameter&result

System.out.println("giveIntGetInt("+a+"): " + result1);

String testStr = "ToBeOrNotToBe";

Memory mTest = new Memory(testStr.length()+1); // '+1' remember about extra byte for \0 character!

mTest.setString(0, testStr);

String testReturn = mTest.getString(0); // you can see that String got properly stored in Memory object

System.out.println("String in Memory:"+testReturn);

Memory intMem = new Memory(4); // allocating space

intMem.setInt(0, 666); // setting allocated memory to an integer

Pointer intPointer = intMem.getPointer(0);

int int1 = sdll.giveVoidPtrGetInt(Pointer.NULL); // passing null, getting default result

System.out.println("giveVoidPtrGetInt(null):" + int1); // passing int stored in Memory object, getting it back

int int2 = sdll.giveVoidPtrGetInt(intMem);

//int int2 = sdll.giveVoidPtrGetInt(intPointer); causes JVM crash, use memory object directly!

System.out.println("giveVoidPtrGetInt(666):" + int2);

byte char1 = sdll.giveVoidPtrGetChar(Pointer.NULL); // passing null, getting default result

byte char2 = sdll.giveVoidPtrGetChar(mTest); // passing string stored in Memory object, getting first letter

System.out.println("giveVoidPtrGetChar(null):" + (char)char1);

System.out.println("giveVoidPtrGetChar('ToBeOrNotToBe'):" + (char)char2);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值