Problema com PDA(ARM-WINCE)/JNI/Cross-compiler

Hi experts!!!

Após muito procurar, resolvi pedir a ajudade de quem sabe mais…eheehhe
Estou fazendo uma aplicação CDC para um PDA Dell ARM com Win CE, mas me deparei com um problema.
Eu precisava realizar um Runtime.exec(), mas descobrir que que esse método não é implementado por muitas JVMs ( tipo a IBM J9 que estou usando), apesar de conseguir fazer-lo na Mysaifu. Contudo devo usar a J9, e vi que para contornar esse problema eu deveria utilizar JNI.
O grande problema que estou tendo, acho, é na hora de fazer o cross-compiler para o pda.
Procurei muitos compiladores arm-wince-pe-gcc, mas a maioria não consegue fazer o link ( undefine references ‘system’) por causa da chamada em C para executar command line… e quando consigo criar a dll… ao executar no PDA ele trava!!!
Já estou nessa busca tem umas duas ou três semanas… será que um alma caridosa não conseguiria me dar uma luz… me passando um link com um compilador que já tenha testado… ou verificando se tem algo errado no meu código???

Obrigado pela ajuda galera!!!
Abraços!!!

public class Player {
   public native void play();
   
   static{
      System.out.println("loading.....");
//      System.loadLibrary("teste");
      System.loadLibrary("\\My Documents\\teste");
      System.out.println("Library loaded");
   }
   
   public static void main(String[] args){
      Player p = new Player();
      System.out.println("Iniciando chamada do método da library");
      p.play();
      System.out.println("chamada realizada!!!");
   }
}
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Player */

#ifndef _Included_Player
#define _Included_Player
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Player
 * Method:    play
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Player_play
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
#include "Player.h"

JNIEXPORT void JNICALL Java_Player_play(JNIEnv *env , jobject obj){
     int i;
     printf("Checking if processor is available...");
//     if(system(NULL)) puts ("Ok");
//     else exit (1);
    
     printf("Executing tcpmp\n");
//     i=system("\\Arquivos de Programas\\TCPMP\\player.exe \\My Documents\\Jogada_de_Craque_Sem_Cripto-118.mpg ");
//     i=system("\"C:\\Documents and Settings\\agranado\\Desktop\\tcpmp.win32.0.71\\player.exe\" c:\\Jogada_de_Craque_Sem_Cripto-118.mpg ");
     printf("The value returned was: %d.\n",i);
}; 

Amigo, para trabalhar com Windows CE, provavelmente (é que nunca fiz isso, por isso não posso jurar de pés juntos) você vai ter de fazer 2 coisas:

  • Usar o compilador da Microsoft (não o gcc) - aquele Embedded Visual Studio adequado 'a sua versão do Windows CE (por favor, consulte a documentação da Microsoft ou a documentação da sua JVM; )
  • Nunca vi usando printf e system em programas em C do Windows CE. (Talvez seja possível em versões mais novas, mas nas versões antigas não era possível).
    Que tal usar alguma outra coisa? (No seu caso, gravar um arquivo com sprintf, CreateFile, WriteFile e CloseHandle, e chamar CreateProcess para chamar outro programa)? Não se esqueça que Windows CE não implementa corretamente as bibliotecas do C e C++ padrão.