Как создать указатели для подклассов в C ++?

У меня небольшая проблема при указании на подкласс API.

Вот оригинальный код Паскаля того, что я пытаюсь сделать:

  Adapter:=TJBluetoothAdapter.JavaClass.getDefaultAdapter;
remoteDevice:=Adapter.getRemoteDevice(stringtojstring(targetMACAddress));
sock:=remoteDevice.createRfcommSocketToServiceRecord(UID);

Сокращенная версия этого:

sock:=TJBluetoothAdapter.JavaClass.getDefaultAdapter.getRemoteDevice(stringtojstring(targetMACAddress)).createRfcommSocketToServiceRecord(UID);

Здесь у меня есть то, что я уже пытался сделать:

  _di_JBluetoothSocket* sock = new _di_JBluetoothSocket;
sock = &TJBluetoothAdapter::JavaClass->getDefaultAdapter()->getRemoteDevice(StringToJString(targetMACAddress))->createRfcommSocketToServiceRecord(uid);

а также:

  TJBluetoothAdapter::JavaClass->getDefaultAdapter()->getRemoteDevice(StringToJString(targetMACAddress))->createRfcommSocketToServiceRecord(uid)* sock;

а также:

  TJBluetoothAdapter* sock;
sock = TJBluetoothAdapter::JavaClass->getDefaultAdapter()->getRemoteDevice(StringToJString(targetMACAddress))->createRfcommSocketToServiceRecord(uid);

Однако я всегда получаю ошибку при компиляции, что мне делать?
С тех пор, спасибо за ваш совет.

0

Решение

Вы объявляете sock переменная неверно. Не объявляйте указатель на _di_... тип класса. это уже указатель (точнее, это typedef для System::DelphiInterface класс, который является C ++ умный указатель обертка вокруг указателя на интерфейс Delphi).

_di_JBluetoothAdapter Adapter = TJBluetoothAdapter::JavaClass->getDefaultAdapter();
_di_JBluetoothDevice remoteDevice = Adapter->getRemoteDevice(StringToJString(targetMACAddress));
_di_JBluetoothSocket sock = remoteDevice->createRfcommSocketToServiceRecord(UID);

Что примерно эквивалентно этому:

JBluetoothAdapter *Adapter = TJBluetoothAdapter::JavaClass->getDefaultAdapter();
Adapter->AddRef();

JBluetoothDevice *remoteDevice = Adapter->getRemoteDevice(StringToJString(targetMACAddress));
remoteDevice->AddRef();

JBluetoothSocket *sock = remoteDevice->createRfcommSocketToServiceRecord(UID);
sock->AddRef();

...

sock->_Release();
remoteDevice->_Release();
Adapter->_Release();
1

Другие решения