3
我使用JNA來訪問一個DLL,一切工作正常......而我在調試!!!JNA指針檢索值
問題是當我在非調試模式下運行我的java代碼。
dll的目的是通過在一個字符串中傳遞somme參數來調用,並用結果填充一個char指針。
所以要在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 taille Prexis : SCHAINE=[%d]; EXMES=[%d]", chaineSortie.length(), chaineExmes.length()));
log.debug(String.format("Retour Prexis : SCHAINE=[%s]; EXMES=[%s]", chaineSortie, chaineExmes));
這是我的C函數摘錄:
#define PRX_ALPHA char
#define EALPHA PRX_ALPHA *
#define SALPHA PRX_ALPHA *
EALPHA CHAINE;
SALPHA SCHAINE;
EDATE DATEJOUR;
SALPHA EXMES;
int winapi myFunction(
CHAINE,
SCHAINE,
DATEJOUR,
EXMES
) {
// Do something with the CHAINE and DATEJOUR then fill SCHAINE and EXMES with an answer
to my call
Thnaks提前爲每個幫助,我又立刻陷入
感謝您的回答,它解決了我的問題 – user799254 2011-07-15 07:48:36