Мой код имеет интерфейс типа
class IExample { ~IExample(); //pure virtual methods ...};
класс, наследующий интерфейс, подобный
class CExample : public IExample { protected: CExample(); //implementation of pure virtual methods ... };
и глобальная функция для создания объекта этого класса -
createExample( IExample *& obj ) { obj = new CExample(); } ;
Теперь я пытаюсь получить оболочку Java API, используя SWIG, интерфейс, сгенерированный SWIG, имеет конструктор типа - IExample(long cPtr, boolean cMemoryOwn)
и глобальная функция становится createExample(IExample obj )
Проблема в том, когда я делаю,
IExample exObject = new IExample(ExampleLibraryJNI.new_plong(), true /*or false*/ );
ExampleLibrary.createExample( exObject );
API-интерфейс createExample(...)
на уровне C ++ успешно вызывается, однако, когда вызов возвращается на уровень Java, переменная cPtr (long)
не обновляется. В идеале эта переменная должна содержать адрес объекта CExample
.
Я прочитал в документации, что карты типов могут использоваться для обработки выходных параметров и ссылок на указатели; однако я не могу найти подходящий способ использования карт типов для решения этой проблемы или любого другого обходного пути.
Пожалуйста, предложите, если я делаю что-то не так, или как использовать typemap в такой ситуации?