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 回答