0

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);

ただし、コンパイル時に常にエラーが発生します。どうすればよいですか? 以来、アドバイスありがとうございます。

4

1 に答える 1

1

sock変数を正しく宣言していません。_di_...クラス型へのポインターを宣言しないでください。これはすでにポインタです(より具体的には、クラスの typedef であり、Delphi インターフェイス ポインタSystem::DelphiInterfaceの C++スマート ポインタラッパーです)。

_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();
于 2015-04-06T17:59:37.527 に答える