小编use*_*254的帖子

JNA指针检索值

我正在使用JNA访问一个DLL,一切正常......我正在调试!

问题是我在非调试模式下运行我的java代码.

通过在字符串中传递somme参数并使用结果填充char指针来调用dll的目的.

所以要在java中检索结果我正在使用PointerByReference对象.当我在调试时没有问题,我得到了正确的结果,但我的结果中只有一个特征在于标准的运行过程.

这是我的java调用:

PointerByReference EXMES = new PointerByReference();
PointerByReference SCHAINE = new PointerByReference();
DoubleByReference dateDujour = new DoubleByReference(DATEJOUR);

log.debug(String.format("Appel avec les arguments : ECHAINE=[%s]; DATEJOUR=[%s]", echaine, sdf.format(dateEngagement)));

Map<String, Object> options = new HashMap<String, Object>();
options.put(Library.OPTION_TYPE_MAPPER, W32APITypeMapper.ASCII);

log.error(String.format("Default Charset : [%s]", Charset.defaultCharset().displayName()));
Native.setProtected(true);
MyNativeLibrary library = (MyNativeLibrary) Native.loadLibrary("myLib", MyNativeLibrary.class, options);
library = (MyNativeLibrary) Native.synchronizedLibrary(library);

String chaineAscii = new String("DATE_NAISSANCE\n19780102\nMEDIA\n4\n".getBytes(Charset.forName("US-ASCII")));

log.error(String.format("ECHAINE [%s]", chaineAscii));

library.SATINTS(chaineAscii, SCHAINE, dateDujour, EXMES);

String chaineSortie = new String(SCHAINE.getPointer().getString(0, false).getBytes(Charset.forName("US-ASCII")));
String chaineExmes = new String(EXMES.getPointer().getString(0, false).getBytes(Charset.forName("US-ASCII")));

log.debug(String.format("Retour …
Run Code Online (Sandbox Code Playgroud)

c java native jna

3
推荐指数
1
解决办法
5173
查看次数

标签 统计

c ×1

java ×1

jna ×1

native ×1