Mon code a une interface commemanipulation refrence aux pointeurs/doubles pointeurs en utilisant SWIG [C++ Java]
class IExample { ~IExample(); //pure virtual methods ...};
une classe héritant de l'interface comme
class CExample : public IExample { protected: CExample(); //implementation of pure virtual methods ... };
et global fonction pour créer l'objet de cette classe -
createExample(IExample *& obj) { obj = new CExample(); } ;
Maintenant, je suis en train d'obtenir wrapper API Java en utilisant SWIG, l'interface générée SWIG a une construcotr comme - IExample(long cPtr, boolean cMemoryOwn)
et la fonction globale devient createExample(IExample obj)
Le problème est quand je fais,
IExample exObject = new IExample(ExampleLibraryJNI.new_plong(), true /*or false*/); ExampleLibrary.createExample(exObject);
L'API createExample(...)
au niveau de la couche C++ est appelée avec succès, mais lorsque l'appel revient à la couche Java, la variable cPtr (long)
n'est pas mise à jour. Idéalement, cette variable doit contenir l'adresse de l'objet CExample
.
J'ai lu dans la documentation que les typemaps peuvent être utilisés pour gérer les paramètres de sortie et les références de pointeur; Cependant, je ne suis pas en mesure de trouver le moyen approprié d'utiliser typemaps pour résoudre ce problème, ou toute autre solution de contournement.
S'il vous plaît suggérer si je fais quelque chose de mal, ou comment utiliser typemap dans une telle situation?