Avatar billede ng-km Nybegynder
10. oktober 2012 - 23:34 Der er 7 kommentarer og
1 løsning

Indlæsning af data via dll - pointer-crash....?

Jeg er ved at indlæse nogle temperaturmålinger fra en PicoLog TC08 temeperaturlogger. Jeg indlæser data via en dll-fil, der kører igennem JNA. Jeg kan åbne enheden, starte temperaturmålinger, og stoppe enheden igen, så det hele funger umiddelbart fint. Jeg kan imidlertid ikke få læst temperaturene ud. Programmet crasher og giver denne fejl:

# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x04f83d03, pid=6400, tid=6548
#
# JRE version: 6.0_16-b01
# Java VM: Java HotSpot(TM) Client VM (14.2-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [usbtc08.dll+0x3d03]


Her er metoden der crasher. Jeg tror fejlen ligger i min manglende forståelse for hvad parametrene dækker over. Jeg ved f.eks ikke hvad jeg skal sætte ind som en pointer.

----------------------------------------------------
long usb_tc08_get_temp
(
short handle,
float * temp_buffer,
long * times_ms_buffer,
long buffer_length,
short * overflow,
short channel,
short units,
short fill_missing
)

Forklaringen fra dokumentationen:

temp_buffer = Pointer to a location where the readings are to be placed.
times_ms_buffer = Returns the time that the first channel was converted (optional.)
buffer_length = Length of data buffers.
overflow = Pointer to a variable that will be assigned a value of 1 if
an overflow occured on any of the readings copied into
temp_buffer, or 0 if an overflow did not occur. An
overflow occurs when the input signal is higher than the
measuring range of the USB TC-08.

--------------------------------------------------

Kan nogen hjælpe mig med at få temperaturen udlæst?
Avatar billede arne_v Ekspert
11. oktober 2012 - 00:51 #1
FloatByReference
LongByReference
ShortByReference

er mit bud.
Avatar billede ng-km Nybegynder
11. oktober 2012 - 09:51 #2
Er ikke ved arbejdsPC'en lige nu, så jeg kan ikke teste før i aften.

Mener du at jeg skal oprette objekter som f.eks New Int() eller evt. et Int-array og sende med, eller er der en anden mening med ..ByReference?
Avatar billede arne_v Ekspert
11. oktober 2012 - 14:02 #3
IntByReference ibr = new IntByReference();
whatever(..., ibr, ...);
int i = ivr.getValue();
Avatar billede ng-km Nybegynder
11. oktober 2012 - 21:03 #4
Nu kan jeg sende et reference-objekt via metoden, men jeg får ikke læst noget i objekterne. De står bare på 0.0, eller hvad jeg har skrevet i dem, når jeg får dem tilbage. Jeg er lidt blank. Nogen forslag?
Avatar billede arne_v Ekspert
12. oktober 2012 - 00:25 #5
proev og saet de to buffer argumenter til float[] og int[] og send den faktisk laengde af de array med over i buffer_length
Avatar billede ALS Praktikant
15. januar 2013 - 13:27 #6
Kontakt evt. den danske forhandler af Picotech
http://www.microtec.dk
Avatar billede ALS Praktikant
15. januar 2013 - 13:28 #7
Kontakt evt. den danske forhandler af Picotech
http://www.microtec.dk
Avatar billede ng-km Nybegynder
23. januar 2013 - 19:20 #8
Det lykkedes ikke, så jeg lukker tråden.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester