У меня небольшая проблема при указании на подкласс 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);
Однако я всегда получаю ошибку при компиляции, что мне делать?
С тех пор, спасибо за ваш совет.
Вы объявляете 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();