Bonjour,
je cherche à convertir cette ligne de code c++ en java
Merci bcpCode:typedef int (*td_fn_LoadingProgress)(int,void*);
Version imprimable
Bonjour,
je cherche à convertir cette ligne de code c++ en java
Merci bcpCode:typedef int (*td_fn_LoadingProgress)(int,void*);
typedef + pointeur de fonction (si mes souvenirs ne me trompent pas) ? Cela ne va pas etre possible directement.
Dans le pire des cas on devrait s'en sortir avec la creation d'un nouveau type mais il faudra aussi modifier le code ailleurs :
ou une classe du genre :Code:
1
2
3 public interface FuncCpp { public int td_fn_LoadingProgress(int a, Object b); }
Evidement avec des closures ca serait plus simple:Code:
1
2
3
4
5 public class FuncCpp { public int td_fn_LoadingProgress(int a, Object b) { return 0; } }
je fais comment dans le cas de pointeur sur matrice ??
tel que DcmData est une classe, et DeleteAllElts est une méthode comprise dans cette classe.Code:
1
2
3 DcmData ** p_dcmdata; (*p_dcmdata)->DeleteAllElts();
en java du moment qu'il n'ya pas de pointeurs je fais comment ?? j'ai déjà essayé
mais ça marche pas ???????Code:DcmData[] p_dcmdata;
Que veux tu dire par ça ne marche pas?
Quel est l'erreur sortie?
J'ai dut mal a comprendre la question, d'ou ma reponse est probablement hors sujet mais je tente quand meme...
Avec l'API Reflection, tu pourrais peut etre te sortir de cette situation.
Tu px utiliser l'objet Method (qui est une "sorte de pointeur" et qui pointera vers une vrai methode d'une classe).
Ensuite utilise invoke pour realiser l'appel.
Code :
Code:
1
2
3
4
5
6
7
8 public class DcmData { public void DeleteAllElts(int a, Object b) { System.err.println("J'efface les elements ?! "+a+" - "+b); } }
Mais bon ne sachant pas trop ton but je tappe vraiment au pif :DCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public class main { public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { // Methode normale DcmData p_dcmdata = new DcmData(); p_dcmdata.DeleteAllElts(0, "toto"); // En utilisant une sorte de "pointeur" (je mets vraiment les guillemets en esperant correction). DcmData ptr_dcmdata = p_dcmdata; Method method_pseudo_ptr = p_dcmdata.getClass().getMethod("DeleteAllElts", int.class, Object.class); method_pseudo_ptr.invoke(p_dcmdata, 0, "TOTO"); } }
Tu ne veux pas donner tout ton code (du moins la partie utile) car c'est difficile à comprendre.
ma question est la suivante :
j'ai un objet déclaré en c++ de la sorte :
les appel de l'objet sont bien évidemment de la sorte qu'il s'agit d'un pointeur sur matrice, en particulier les lignesCode:DcmData ** p_dcmdata;
je cherche à convertir ceci en java, et comme en java il n'y a pas notion de pointeur :roll:Code:
1
2 (*p_dcmdata)->DeleteAllElts(); *p_dcmdata = new DcmData();
Salut,
C'est normal puisque tu as déclaré cela comme un tableau...
:arrow: Tu dois appeler la méthode sur un (ou plusieurs) élément(s) du tableau.
Mais plus globalement, entre ce message et l'autre sur la libération de mémoire, j'ai l'impression que du cherche à coder en C++, mais en Java.
En gros tu as l'habitude de faire "comme cela" en C++, et tu veux faire la même chose en Java.
A mon avis c'est une grosse erreur, car malgré une syntaxe relativement proche, les concepts et les notions misent en place par les deux langages sont très différentes. Et ce qui est adapté à l'un ne l'est pas à l'autre...
:arrow: Tu ne devrais pas te poser la question de savoir comment "traduire" du C++ en Java !
Tu devrais plutôt détailler ce à quoi tu veux aboutir (qu'est-ce que tu veux obtenir ?), et voir comment tu le ferais en Java.
a++
J'ai l'impression pour ton problème que :
Adiguba m'a précedé ;)
j'aurais aimé reprendre le code en java à zéro, sauf que malheureusement ça fait beaaaaaucoup de lignes de code, et trop peu de temps pour comprendre et ensuite reprendre.
en tout cas merci beaucoup, et souhaitez moi bonne chance :cry:
Tu donnes l'impression d'essayer de retranscrire du code literallement. Tu perdras a mon avis plus de temps a essayer de retranscrire litteralement que tout analyser une bonne fois.
quel est ce besoin de traduction du code c++ en java? Ne serait-il pas plus judicieux de mettre une coque JNI autour de ton code c++ pour invoquer ton code c++ depuis java?
Au lieu de réinventer la roue, as-tu vérifier qu'il n'existe pas déjà des librairies lisant le format dicom en java? Je pense par exemple à ceci (dicom toolkit) qui ressort en premier d'une recherche
http://www.dcm4che.org/confluence/di...+DICOM+Toolkit
Ensuite, si c'est juste la lecture d'un format de fichier, t'aura plus vite faire de recoder de 0 en java que de tenter de transcrire du code C++ qui sera illisible à l'arrivée.
En fait après réflexion cette solution d'une interface JNI je pense que je vais l'adopter, je commence par me documenter pour voir comment ça marche
Merci beaucoup
Une toute dernière question :
j'ai trouvé qu'il existe deux interfaces JNI/JNA, est-ce que l'appel du code C++ depuis Java sera possible s'il s'agit d'une applet, car je cherche à développer dans le web ??
non, charger du jni/jna depuis une applet est compliqué et nécessite l'installation des librairies propriétaires dans la machine du client.