6 messages in net.java.dev.jna.usersRe: [jna-users] Re: call by reference...
FromSent OnAttachments
Mr Young-soo SongFeb 29, 2008 1:38 am 
Timothy WallMar 2, 2008 6:16 am 
Mr Young-soo SongMar 3, 2008 7:42 pm 
Timothy WallMar 4, 2008 5:42 am 
Mr Young-soo SongMar 5, 2008 12:24 am 
Timothy WallMar 5, 2008 6:24 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: [jna-users] Re: call by reference of double arrayActions...
From:Timothy Wall (twal@dev.java.net)
Date:Mar 5, 2008 6:24:44 am
List:net.java.dev.jna.users

On Mar 5, 2008, at 3:25 AM, Mr Young-soo Song wrote:

Thanks! Timothy~

Now I got the array return values via calling by reference using Memory class.

Here is sample code for dummies like me ^^;

C Code in DLL

extern "C" __declspec(dllexport) double callByRef(int a,double b[])

// JNI mapping

NativeLibrary.addSearchPath("genDLL","C:\\project\\vc_project\\GenDLL \\debug");

testLib lib = (testLib) Native.loadLibrary ("genDLL",testLib.class);

public interface testLib extends StdCallLibrary

{

double callByRef(int a,Memory b) ;

}

A double[] argument would be the simplest mapping, and the preferred one.

Memory dblPtr = new Memory(100*Double.SIZE) ;

ret = lib.callByRef( 100, dblPtr);

double[] x = dblPtr.getDoubleArray(0, 100);

This is actually incorrect, since Double.SIZE is in bits. You are allocating 8 times the amount of memory actually required, so it won't actually cause a failure. If you're going to use Memory, you would want to set the size to "count * Double.SIZE / 8".