Я использую C dll с этим кодом:
1)
AIC_BRIDGE_API AIC_ERROR_CODE aic2_set_cb_function (
void (*cb2_start_dsts) (AIC2_DSTS_START_STOP),
void (*cb2_stop_dsts) (AIC2_DSTS_START_STOP),
void (*cb2_dsts_rcvd_ex) (unsigned int, unsigned long *, char *, AIC2_DSTS_STO),
void (*cb2_log) (const char *, int, const char *, int)
);
2)
aic2_set_cb_function (NULL, NULL, cb2_dsts_rcvd_ex, NULL);
DLL работает во многих приложениях с C / C ++и .Net код.Мой код на Java такой:
1)
public interface ReadCallbackInt extends Callback {
void invoke(int iNumDv, Pointer pMicDv, String pcARName, AIC2_DSTS_STO.ByValue sto);
}
2)
public void aic2_set_cb_function(StartDSCallbackInt fn1,
StopDSCallbackInt fn2,
ReadCallbackInt fnReadCB,
LogCallbackInt fn4);
3)
TestLib.ReadCallbackInt fnReadCB = new TestLib.ReadCallbackInt() {
long[] IntArray;
@Override
public void invoke(int iNumDv, Pointer pMicDv, String pcARName, AIC2_DSTS_STO.ByValue sto) {
if (sto.bTsNamePres > 0) {
System.out.println("iNumDv: " + iNumDv);
System.out.println("pMicDv: " + pMicDv);
System.out.println("pcARName: " + pcARName);
System.out.println("sto: " + sto.TsName);
if (pMicDv!=null) {
IntArray = new long[iNumDv];
IntArray = pMicDv.getLongArray(0, iNumDv);
if (IntArray != null) {
System.out.println("IntArray: " + IntArray +" First El. " + IntArray[0]);
}
}
}
}
}
............... ...............
4)
TestLib.INSTANCE.aic2_set_cb_function(null, null, fnReadCB, null);
Проблема в том, что в IntArray Iполучить все элементы как ноль.Вы можете помочь мне?
5) Оригинальный код C:
void cb2_dsts_rcvd_ex (unsigned int iNumDv, unsigned long *piMicDv, char *pcARName, AIC2_DSTS_STO sto)
{
unsigned int i;
AIC2_DV *pdv;
printf ("\nRemote %s: ", pcARName);
if (sto.bTsNamePres)
printf ("Report (%s/%s) received\n", sto.TsName.pcDomainName, sto.TsName.pcName);
else
printf ("Report (unknown) received\n");
for (i = 0; i < iNumDv; i++)
if (piMicDv[i] != AIC_ID_DV_INVALID)
{
pdv = aic2_get_dv_info (piMicDv[i]);
log_data_values_aic2 (pdv, stdout);
if (pdv) aic2_free_dv_info(pdv);
}
}