如何在 C++ 中为子类创建指针?

How to create pointers for subclasses in C++?

我在指向 API 的子类时遇到了一些麻烦。

这是我要执行的操作的原始 pascal 代码:

  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_... class 类型的指针。它已经一个指针(更具体地说,它是 System::DelphiInterface class, which is a C++ smart pointer 围绕 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();