Toon posts:

[JNI] variabele mee geven met de callback functie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik heb nog steeds dingen waarmee ik vast loop met JNI. Ik heb vele tutorial doorgelopen maar die geven te weinig info, in iedere geval heb ik niet gevonden waar ik echt naar zocht.

Ik wil met mijn callback funtie een long meegeven naar mijn java app. In mijn java app wil ik hem dan kunnen gebruiken. Voor de test even System.out.println(mijn lonn);

Ik eigenlijk geen idee hoe dat moet. Ik roep een java method met mijn library op met de volgende code:

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
void LocalMessageBox (long m)
{
    //Call Java native method
    jclass cls;
    jmethodID mid;

    cls = (*jenv)->GetObjectClass(jenv, jobj);
    mid = (*jenv)->GetMethodID(jenv, cls, "Mbox","()V");
    if (mid == 0) {
        return;
        }
    (*jenv)->CallVoidMethod(jenv, jobj, mid);
}


Nou wil ik bij deze call een long toevoegen die m heet. En die dus mee sturen naar mijn java zodat ik deze daar kan gebruiken.

Java code is:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  public native int Start ();

  boolean packFrame = false;

  //Open class MBoxFrame

  private void Mbox() {

    MBoxFrame frame = new MBoxFrame();

    if (packFrame) {
      frame.pack();
    }
    else {
      frame.validate();
    }
    //Center the window
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = frame.getSize();
    if (frameSize.height > screenSize.height) {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width) {
      frameSize.width = screenSize.width;
    }
    frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height -    frameSize.height) / 2);
    frame.setVisible(true);

        //Wait till user select Button (Boolean c="false" to c="true")
        while ( !frame.getBoolean() )
        {
            try {
                 //amount sleep is frame rate
                             Thread.currentThread().sleep(100);
            }
            catch(Exception e) {
                          e.printStackTrace();
                }
        }
  }


Hier wil ik dus die boolean kunnen gebruiken.

???

Gr

Verwijderd

Topicstarter
niemand?
modbreak:
Je hoeft je topic niet zo snel te kicken.
Kicken is pas toegestaan na 24h. Je topic blijft minstens één dag in de forumlist zichtbaar, dus is het niet nodig om binnen de 24h te kicken.

[ Voor 94% gewijzigd door whoami op 14-11-2003 14:59 ]


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
kijk eens naar de signature van CallVoidMethod(...) in de C header. Zou het soms een functie zijn met variabele parameters?
Kijk nog eens in de Java JNI tutorial waar het beschreven staat met callback met een int (vervang voor jlong en je bent klaar) parameter en evt ook met een va_list.

Wat je nou weer bedoeld met je boolean weet ik niet, wees daar aub iets duidelijker in. Verder begin ik ondertussen wel een beetje te twijfelen aan je tutorials. Waarom vind jij niet in tutorials (dit is dezelfde als waar ik je eerder op gewezen heb) wat ik erin vind ?